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