使用awk打印每隔一个字段

时间:2015-01-29 06:55:41

标签: for-loop awk

我有以下输入文件,我希望每隔一个字段打印一次:

A=1=B=2=C=3

获得以下输出:

1 2 3 

我试过了:

awk 'BEGIN {FS="="; OFS=" "} {for (i=2; i<=NF; i+=2); print ($i) }' input_file

它显然不起作用。我认为我的for循环部分是正确的,但我的打印部分出了问题。

谢谢。

1 个答案:

答案 0 :(得分:4)

$ awk -v RS== -v ORS=" " '0==NR%2' input_file
1 2 3

如何运作

  • -v RS==

    将输入记录分隔符设置为=

  • -v ORS=" "

    将输出记录分隔符设置为空格。

  • 0==NR%2

    每隔一行打印一次。

    NR是行号。 NR%2是模数为2的行号。因此,条件0==NR%2在每个其他行上都为真。当条件为真时,执行动作。由于未指定任何操作,因此将执行默认操作,即打印记录。

替代

原始代码中的关键问题是错误的分号。考虑:

for (i=2; i<=NF; i+=2); print ($i)

在这种情况下,print循环退出后,只有 后才会执行for命令。

尝试:

$ awk 'BEGIN {FS="="; OFS=" "} {for (i=2; i<=NF; i+=2)print $i }' input_file
1
2
3

或者,如果您想要输出一行:

$ awk 'BEGIN {FS="="} {for (i=2; i<=NF; i+=2)printf "%s ", $i; print "" }' input_file
1 2 3