这个 awk 脚本有什么作用?

-2 awk

这是做什么的?

( awk '{ if (NR > 1) print prev " " $1; prev = $1; }' file)
Run Code Online (Sandbox Code Playgroud)

ter*_*don 5

那是一个awk脚本。awk 是一种特别擅长处理字段分隔数据的编程语言。脚本本身非常简单:

  • if (NR > 1):NR是一个特殊awk变量,保存当前输入行的行号。所以这意味着“如果当前行号大于 1”,换句话说“对于除第一行之外的每一行”。
  • print prev " " $1;: 就像 一样NR$1也是一个特殊变量,保存该行的第一个字段。字段由空格定义(默认情况下,您可以使用 更改它-F),因此给定像foo bar, $1will befoo$2will be 这样的行bar。因此,这将打印变量的值prev(请参见下一点),后跟一个空格 ( " "),然后是当前行的第一个字段。
  • prev = $1;:将此行的第一个字段保存在变量中prev。因此,当我们处理下一行时,prev将具有上一行的第一个字段。

要查看它的作用,您可以在测试输入上尝试。例如,使用seq 5which 打印从 1 到 5 的数字:


$ seq 5
1
2
3
4
5
$ seq 5 | awk '{ if (NR > 1) print prev " " $1; prev = $1; }'
1 2
2 3
3 4
4 5
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,awk 脚本只是打印前一行的第一个字段,然后打印当前行的第一个字段。

  • @Henriksupportsthecommunity 我不知道,是什么让你认为OP的文件有多个字段?我们没有得到任何细节,所以我根据所提供的信息做了我能做的事情。老实说,我能想到的最有可能的情况是该文件每行只有一个字段。 (2认同)