协慌网

登录 贡献 社区

如何反转文件中的行顺序?

我想反转文本文件(或 stdin)中的行顺序,保留每行的内容。

因此,即从以下内容开始:

foo
bar
baz

我想结束

baz
bar
foo

为此有标准的 UNIX 命令行实用程序吗?

答案

还值得一提的是: tac cat ahem,reverse)。 coreutils 的一部分

将一个文件翻转到另一个文件

tac a.txt > b.txt

BSD 尾巴:

tail -r myfile.txt

参考: FreeBSDNetBSDOpenBSDOS X手册页。

著名的 sed 技巧

# reverse order of lines (emulates "tac")
# bug/feature in HHsed v1.5 causes blank lines to be deleted
sed '1!G;h;$!d'               # method 1
sed -n '1!G;h;$p'             # method 2

(说明:在非初始行之前添加缓冲区,交换行并保留缓冲区,最后打印出行)

或者从 awk 单行代码中(以更快的速度执行):

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

如果你不记得了

perl -e 'print reverse <>'

在具有 GNU 实用程序的系统上,其他答案更简单,但并非全世界都是 GNU / Linux ...