使用 awk 每隔一个字段打印一次

using awk to print every second field

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

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 循环部分是正确的,但是我的打印部分有问题。

谢谢。

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

工作原理

  • -v RS==

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

  • -v ORS=" "

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

  • 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