如何按相反顺序而不是降序对文件列表进行排序? sort -r 不符合我的要求

如何按相反顺序而不是降序对文件列表进行排序? sort -r 不符合我的要求

我有以下命令

cat filename 

输出:

0040
0042
0048
0043

如果我这样做cat filename | sort -r输出是:

0048
0043
0042
0040

我不想要那样;它看起来是按降序而不是逆序排序。

我想要以下输出(真正的相反顺序)

0043
0048
0042
0040

我怎样才能做到这一点?

答案1

要反转文件,请使用tac:

tac filename

sort -r不做你想做的事,因为它不会反转,而是按相反的顺序排序;这就是为什么您最终会得到按降序排列的数字(尽管您不应该将它们视为此处的数字,因为默认排序是字典顺序)。

答案2

你真的应该使用tac, 但是你可以使用 来执行此操作sort -r,如果您为每一行添加自己的编号前缀,并对它们进行数字排序。之后您必须再次切断行号。

cat filename | nl | sort -n -r | cut -f 2-

这不适用于所有输入:nl将跳过空白行,并且还会查找由仅包含字符串(多个)的行分隔的“部分” \:。您必须使用-ba来处理空行,并使用-d XZ, 将节分隔符更改为任何不会单独出现在一行上的 2 字符序列。

答案3

我正在搜索并找到了两个有用的答案;一个只是tac在最后使用,另一个是awk我不明白的语句!

答案1:cat filename | tac

答案2:cat filename | awk '{arr[i++]=$0} END {while (i>0) print arr[--i] }'

只是想知道为什么sort -r不起作用!...

相关内容