我已经搜索过,但没有找到答案。我想打印文件中的最后一行(或记录);然后仅使用 awk 打印第一行。我知道如何打印第一行:
NR == 1{print}
和最后一行
END{print}
但是,如何切换位置呢?有可能吗?当我尝试这样做时,我只会遇到错误。有没有办法整合
NR == 1{print}
命令转换成END命令?再说一遍,我只想在 awk 中执行此操作。谢谢!
答案1
只需将第一行保存到变量中
awk 'NR==1 {first = $0} END {print; print first}' file
前任。给出file
为
line 1
line 2
line 3
line 4
line 5
然后
$ awk 'NR==1 {first = $0} END {print; print first}' file
line 5
line 1
答案2
AWK 具有getline()
允许前进到下一行的功能。当我们无法进一步前进时,即我们已到达文件结尾时,该行的退出状态为零。因此,我们可以使用的基本思想是将第一行存储到变量中,跟踪当前行,并继续尝试前进getline
。如果我们不能 - 按所需的顺序打印变量。
$ cat input.txt
first line
middle line
last line
$ awk 'NR==1{first=$0};{while (getline line); printf "%s\n%s\n",line,first}' input.txt
last line
first line