
Ich versuche diese einfache while
Schleife in Bash.
Meine Textdatei
# cat test.txt
line1:21
line2:25
line5:27
These are all on new line
Mein Skript
# cat test1.sh
while read line
do
awk -F":" '{print $2}'
done < test.txt
Ausgabe
# ./test1.sh
25
27
Die Ausgabe druckt nicht den $2
Wert der ersten Zeile. Kann mir bitte jemand helfen, diesen Fall zu verstehen?
Antwort1
Sie brauchen diese Schleife nicht:
$ awk -F ':' '{ print $2 }' test.txt
21
25
27
awk
verarbeitet die Eingabe zeilenweise.
Mit Ihrer Schleife read
holt sich der die erste Zeile der Datei, die verloren geht, da sie nicht verwendet/ausgegeben wird. Der awk
übernimmt dann die Standardeingabe der Schleife und liest die anderen beiden Zeilen in der Datei (die Schleife führt also immer nur eine einzige Iteration aus).
Ihre Schleife, kommentiert:
while read line # first line read ($line never used)
do
awk -F ':' '{ print $2 }' # reads from standard input, which will
# contain the rest of the test.txt file
done <test.txt
Antwort2
Ich konnte Ihren Code reparieren, indem ich hinzufügte echo
. Der Grund dafür ist beschriebenDort, Frage, warum zwei andere Werte gedruckt werden.
while read line;
do
echo "$line" | awk -F":" '{print $2}'
done < test.txt
Antwort3
while IFS=":" read z x; do
echo $x;
done<test.txt
oder
sed "s/^.*://g" test.txt