-2 awk
这是做什么的?
( awk '{ if (NR > 1) print prev " " $1; prev = $1; }' file)
Run Code Online (Sandbox Code Playgroud)
那是一个awk
脚本。awk 是一种特别擅长处理字段分隔数据的编程语言。脚本本身非常简单:
if (NR > 1)
:NR
是一个特殊awk
变量,保存当前输入行的行号。所以这意味着“如果当前行号大于 1”,换句话说“对于除第一行之外的每一行”。print prev " " $1;
: 就像 一样NR
,$1
也是一个特殊变量,保存该行的第一个字段。字段由空格定义(默认情况下,您可以使用 更改它-F
),因此给定像foo bar
, $1
will befoo
和$2
will be 这样的行bar
。因此,这将打印变量的值prev
(请参见下一点),后跟一个空格 ( " "
),然后是当前行的第一个字段。prev = $1;
:将此行的第一个字段保存在变量中prev
。因此,当我们处理下一行时,prev
将具有上一行的第一个字段。要查看它的作用,您可以在测试输入上尝试。例如,使用seq 5
which 打印从 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 脚本只是打印前一行的第一个字段,然后打印当前行的第一个字段。