
Ich wurde gebeten, einen Befehl zu schreiben, der die n-te Zeile ( MYN
) einer Datei ( x
) an eine andere Datei ( y
) anfügt. Folgendes habe ich bisher getan:
MYN=4
hey=$(awk 'NR==$MYN' x)
echo "$hey" >> y
Aber warum funktioniert das nicht?
Antwort1
Wenn Ihr Ziel darin besteht, eine Variable zu übergeben, awk
um sie im Skript zu verwenden, können Sie awk
die folgende -v
Option verwenden:
hey=$(awk -v MYN=$MYN 'NR==MYN' x)
Antwort2
Ich sehe Ihr Problem, Sie verwenden einfache Anführungszeichen. Sie lassen die Bash-Variable nicht $MYN
erweitern. Sie können die Sache komplizierter machen, indem Sie awk
eine neue Variable angeben, oder weil es so einfach ist, können Sie einfach auf doppelte Anführungszeichen umsteigen:
awk "NR==$MYN" x
ich hattegebrauchtsed
aber ich kann keine offensichtlichen Probleme mit Ihrer Logik erkennen
MYN=4
sed "${MYN}q;d" x >> y
Es scheint wie erwartet zu funktionieren:
$ for i in $(seq 1 10); do echo $i >> x; done
$ sed "${MYN}q;d" x
4