bash while ループは予想内容を出力しません。

bash while ループは予想内容を出力しません。

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入力は1行ずつ処理されます。


繰り返すと、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

関連情報