我有以下输入文件,我希望每隔一个字段打印一次:
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循环部分是正确的,但我的打印部分出了问题。
谢谢。
答案 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