使用 awk 打印每隔一个字段

Ris*_*ish 3 awk for-loop

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

A=1=B=2=C=3
Run Code Online (Sandbox Code Playgroud)

获得以下输出:

1 2 3 
Run Code Online (Sandbox Code Playgroud)

我努力了:

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

这显然行不通。我认为我的 for 循环部分是正确的,但我的打印部分有问题。

谢谢。

Joh*_*024 5

$ awk -v RS== -v ORS=" " '0==NR%2' input_file
1 2 3
Run Code Online (Sandbox Code Playgroud)

怎么运行的

  • -v RS==

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

  • -v ORS=" "

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

  • 0==NR%2

    每隔一行打印一次。

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

选择

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

for (i=2; i<=NF; i+=2); print ($i)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,该命令仅在循环退出print执行。 for

尝试:

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

或者,如果您希望输出在一行上:

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