【发布时间】:2021-04-12 01:10:50
【问题描述】:
假设我们有一个 shell 变量$x,其中包含一个空格分隔的从 1 到 30 的数字列表:
$ x=$(for i in {1..30}; do echo -n "$i "; done)
$ echo $x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
我们可以像这样使用 AWK 打印前三个输入记录字段:
$ echo $x | awk '{print $1 " " $2 " " $3}'
1 2 3
我们如何使用 AWK 打印从第 N 个字段开始的所有字段?例如
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
编辑:我可以使用 cut、sed 等来做同样的事情,但在这种情况下,我想知道如何使用 AWK 来做到这一点。
【问题讨论】:
-
输出以换行符分隔。应该用空格隔开。
-
通过刷新页面检查我更新的命令
-
在您写的已删除答案的 cmets 中:在实际情况下,字段之间有不同数量的空格;你想保留这些不同数量的空间吗?
-
应该是:
awk '{for (i=3; i<=NF; ++i) printf "%s", $i (i<NF?OFS:ORS)}' file -
@james-brown,我不想保留它们,但如果它使命令更短也没关系。