我有以下输入文件,我希望打印每隔一个字段:
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 循环部分是正确的,但我的打印部分有问题。
谢谢。
$ 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)
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |