以下のようなファイルがあります
var 3 2014 string
var1 4 2011 string4
var2 6 1999 string2
var3 1 2016 string6
次に、このwhile readループを使用して、列の1つを数値と比較し、何かをエコーします。ただし、目的のフレーズをエコーするのではなく、他の何かをエコーします。
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}'
上記をエコーする代わりに、ファイルの2列目をエコーします。
試してみてください
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リダイレクトは後で発生します。
_home/dir/file.txt | awk '{print $2}'
_の出力をwhile
ループにリダイレクトしようとしているようです。
最初に、正しいパスは_/home/dir/file.txt
_(ただし、これは単なる仮定)である必要があると思います。
2番目の_/home/dir/file.txt | awk '{print $2}'
_は_/home/dir/file.txt
_のコンテンツをawk
にリダイレクトしませんが、_< /home/dir/file.txt awk '{print $2}'
_はリダイレクトします。
3番目に、コマンドの出力をファイルとしてリダイレクトしていますが、これは文字列であり、<<< "$(< /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
_
私はコメントできないので、疑問に思って、なぜ人々がIFSを使用しなかったのか
while IFS = "" read var num year string do if [[$ num -eq 0]]; then echo "番号がゼロに等しい" else echo "番号が0に等しくない fi done <home/dir /file.txt