Verwenden einer Variable zum Abrufen eines Array-Elements innerhalb einer Awk-Anweisung

Verwenden einer Variable zum Abrufen eines Array-Elements innerhalb einer Awk-Anweisung

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.shund /bin/kshes 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 $VARIABLEoder 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 awkdes 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 $iin Ihrem Skript kommt. Insgesamt liefert uns Ihre Frage ein bisschen Code, aber keine Hinweise, um Ihre Frage vollständig zu beantworten

verwandte Informationen