以下程序需要打印单词
First
Second
Third
但是因为来自awk的i参数没有得到“for”循环的值所以打印所有单词:
First second third
First second third
First second third
如何修复awk以便先打印“第一”字,然后再打印“第二”字等等
THX
耶尔
program:
for i in 1 2 3
do
echo "first second third" | awk '{print $i}'
done
答案 0 :(得分:2)
您可以像这样更改代码:
for i in 1 2 3
do
echo "first second third" | awk -v i=$i '{print $i}'
done
使用shell中的变量'i'。
您也可以只更改记录分隔符(RS)以获得相同的结果:
echo "first second third" | awk 'BEGIN{RS=" "} {print $1}'
但我不确定这是不是你想要的。
答案 1 :(得分:2)
你可以这样做:
for a in First Second Third
do
awk 'BEGIN { print ARGV[1] }' $a
done
或者你可以这样做:
for a in First Second Third
do
awk -v arg=$a 'BEGIN { print arg }'
done
答案 2 :(得分:2)
不要做不必要的事。不需要shell for循环!用awk做吧!
$ echo "first second third" | awk '{for(i=1;i<=NF;i++)print $i}'
答案 3 :(得分:0)
或者您可以使用:
echo "first second third" | awk -F " " -v OFS="\n" '{print $1,$2,$3}'