使用 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
我有以下输入文件,我希望每隔一个字段打印一次:
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