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将逐行处理输入。


通过循环,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

相关内容