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
接管循环的标准输入并读取文件中的其他两行(因此循环将只执行一次迭代)。
你的循环,注释:
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
。原因已描述那里,询问为什么它打印其他两个值。
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