
while
私はbashでこの単純なループを試しています。
私のテキストファイル
# cat test.txt
line1:21
line2:25
line5:27
These are all on new line
私のスクリプト
# cat test1.sh
while read line
do
awk -F":" '{print $2}'
done < test.txt
出力
# ./test1.sh
25
27
出力に最初の行の$2
値が印刷されません。このケースを理解するのを手伝ってくれる人はいますか?
答え1
そのループは必要ありません:
$ awk -F ':' '{ print $2 }' test.txt
21
25
27
awk
入力を行ごとに処理します。
ループを使用すると、read
ファイルの最初の行が取得されますが、これは使用/出力されないため失われます。awk
次に、ループの標準入力を引き継ぎ、ファイル内の他の 2 行を読み取ります (したがって、ループは 1 回の反復のみを実行します)。
注釈付きのループ:
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
答え2
を追加することでコードを修正できましたecho
。この理由は説明しましたそこにはなぜ他の 2 つの値が印刷されるのか疑問に思います。
while read line;
do
echo "$line" | awk -F":" '{print $2}'
done < test.txt
答え3
while IFS=":" read z x; do
echo $x;
done<test.txt
または
sed "s/^.*://g" test.txt