使用awk打印每个偶数列字段

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

谢谢。


如果你想学习一些 sedsed 's/[[:alpha:]]=\([[:digit:]]\)/\1 /g' - qqibrow
1个回答

5
$ 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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接