除标题之外的反向行顺序

Rin*_*nke 2 unix shell awk posix

使用shell命令,我想要反转文本文件的行,不包括标题行.

Number,Letter,Person
1,a,Alice
2,b,Bob
3,c,Claire
Run Code Online (Sandbox Code Playgroud)

应该成为

Number,Letter,Person
3,c,Claire
2,b,Bob
1,a,Alice
Run Code Online (Sandbox Code Playgroud)

我在寻找两个 "就地"解决方案(修改原文件)和流媒体解决方案(从stdin读取和打印结果原来的文件到标准输出).

理想情况下,命令或脚本与POSIX兼容,但其他解决方案也可能很有趣.一个oneliner会很好.

我也对任何解决方案的性能/复杂性感兴趣.

anu*_*ava 6

这是awk执行此操作的命令:

awk '{a[NR]=$0} END{print a[1]; for (i=NR; i>1; i--) print a[i]}' file

Number,Letter,Person
3,c,Claire
2,b,Bob
1,a,Alice
Run Code Online (Sandbox Code Playgroud)

这里a[1]代表标题记录.关联数组中的剩余条目a表示索引为记录号的行.

或者,使用head, tail, cat:

{ head -1 f && tail -n +2 file | tac; } > file._tmp && mv file._tmp file

Number,Letter,Person
3,c,Claire
2,b,Bob
1,a,Alice
Run Code Online (Sandbox Code Playgroud)