while 读循环

while 读循环

我有一个如下所示的文件

var     3   2014   string
var1    4   2011   string4
var2    6   1999   string2
var3    1   2016   string6

然后我有这个 while read 循环来将其中一列与数字进行比较,然后回显某些内容。然而,它并没有回应我想要的短语,而是回应了其他的东西。

while read num
do
if [ "$num" = "0" ]; then
echo "Number is equal to zero"
else
echo "number is not equal to 0"
fi
done < home/dir/file.txt | awk '{print $2}' 

它不是回显上面的内容,而是回显文件的第二列。

答案1

你应该试试

awk '{print $2}' home/dir/file.txt | while read num
do
  if [ "$num" = "0" ]; then
    echo "Number is equal to zero"
  else
    echo "number is not equal to 0"
  fi
 done 

混合 awk/bash 解决方案。

正如其他人指出的那样,awk 重定向稍后发生。

答案2

因为我无法发表评论,只是想知道为什么人们没有使用 IFS

while IFS=" " read var num year string
do
  if [[ $num -eq 0 ]]; then
    echo "Number is equal to zero"
  else
    echo "number is not equal to 0"
  fi
done < home/dir/file.txt

答案3

看起来您正在尝试将 的输出重定向home/dir/file.txt | awk '{print $2}'while循环;

首先我猜正确的路径应该是/home/dir/file.txt(但这只是一个假设);

Second/home/dir/file.txt | awk '{print $2}'不会将内容重定向/home/dir/file.txt到 to awk,而 while< /home/dir/file.txt awk '{print $2}'会;

第三,您将命令的输出重定向为文件,但它是一个字符串,您应该将其重定向为:<<< "$(< /home/dir/file.txt awk '{print $2}')"

另外,您也可以将命令的输出直接通过管道传输到while循环< /home/dir/file.txt awk '{print $2}' | while read num

while read num
do
    if [ "$num" = "0" ]; then
    echo "Number is equal to zero"
else
    echo "number is not equal to 0"
fi
done <<< "$(< /home/dir/file.txt awk '{print $2}')"

或者

< /home/dir/file.txt awk '{print $2}' | while read num
do
    if [ "$num" = "0" ]; then
    echo "Number is equal to zero"
else
    echo "number is not equal to 0"
fi
done

相关内容