Ich habe ein Problem, bei dem ein Benutzer die Datei, Spalte, Wert und ID der Zeile gibt. Ich versuche, den Wert der Linieeine Datei in einer bestimmten Spalte einer geteilten Datei Bash Shell bearbeiten
Das Format der Datei zu ändern ist:
F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8
Mein Gedanke Dazu liest man die Datei und legt die Werte jedes Feldes in ein Array. Dann wird finde ich die Linie Ich möchte bei Verwendung ändern, und ich awk
while IFS=$'|t' read -r -a myArray
do
if [ $4 == ${myArray[0]} ]; then
echo "${myArray[1]} ${myArray[2]} ${myArray[4]}"
awk -v column="$5" -v value="$6"-F '{ ${myArray[column]} = value }'
echo "${myArray[1]} ${myArray[2]} ${myArray[4]}"
echo "${column} ${value}"
fi
done < $2
jedoch verwenden, wenn ich tun, dass sich nichts verändert: die Spalten- und Wertargumente drucken nichts.
Irgendwelche Ideen?
Jedes Mal, wenn Sie eine Schleife in der Shell nur schreiben Um Text zu manipulieren, haben Sie den falschen Ansatz. Lesen Sie http://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice für mehr Hintergrund und lesen Sie das Buch Effective Awk Programming, 4th Edition, von Arnold Robbins, um zu lernen, wie man es richtig macht. –