有没有办法只在 awk 中打印文件的最后一行然后打印文件的第一行?

有没有办法只在 awk 中打印文件的最后一行然后打印文件的第一行?

我已经搜索过,但没有找到答案。我想打印文件中的最后一行(或记录);然后仅使用 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

相关内容