
Unten ist der Teil des Codes, der den Fehler verursacht.
for (( p=0; p<${var2}; p++ ))
do
if [[ ${array2[$p]} == *"xyz"* ]]
then
awk -F" " '{ array3[p]="123" };1' ${array1[$i]}
else
awk -F" " '{ array3[p]="456" };1' ${array1[$i]}
fi
Als ich das Skript im Debugmodus ausführte, konnte ich sehen, dass der Wert von p nicht berücksichtigt wird.
+ awk '-F ' '{ array3[p]="456" };1' oct.csv
Ich führe das Skript so aus ./script.sh
und /bin/ksh
es wird die Shell verwendet. Bitte helfen Sie.
Antwort1
Zunächst einmal ist Folgendes falsch:
awk -F" " '{ array3[p]="123" };1' ${array1[$i]}
${array1[$i]}
ist keine Datei, also können Sie es nicht einfach als erstes Kommandozeilenargument an übergeben awk
. Bei Variablen müssten Sie entweder echo $VARIABLE
oder hier einen String verwenden <<<
, wie hier
awk -F" " '{ array3[p]="123" };1' <<< ${array1[$i]}
Zweitens gibt es ein Problem mit dem Umfang. array3[p]="123"
existiert nur innerhalb awk
des Codes, Sie können also nichts außerhalb davon zuweisen. Was Sie jedoch tun könnten, ist einfach
array3[$p]="123"
Es ist auch unklar, woher genau $i
in Ihrem Skript kommt. Insgesamt liefert uns Ihre Frage ein bisschen Code, aber keine Hinweise, um Ihre Frage vollständig zu beantworten