我有以下命令
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
不起作用!...