对于由点分隔符分隔的具有相同列数的行,如
aa.bb cc.dd ...
按最后一列排序很容易
sort -t. -k2,2 file
如果文本文件具有不同的“列”,例如
aa.b.xb cc.dd xx.cc.aa a.b.c.d.e ...
然后如何按最后一个“列”对行进行排序
xx.cc.aa cc.dd a.b.c.d.e aa.b.xb ...
icomxhvb1#
您可以在bash中使用Schwartzian transform。
bash
awk -F. '{print $NF "\t" $0}' file | sort -k1,1 | cut -f2-
cut
piok6c0g2#
使用GNU awk。将数组(a)的索引按字符串升序排序:
awk
a
awk 'BEGIN{ FS="."; PROCINFO["sorted_in"]="@ind_str_asc" } { a[$NF]=$0 } END{ for(i in a) { print a[i]} }' file
输出:
cc.dd a.b.c.d.e aa.b.xb
参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
2条答案
按热度按时间icomxhvb1#
您可以在
bash
中使用Schwartzian transform。cut
命令删除第1列。piok6c0g2#
使用GNU
awk
。将数组(a
)的索引按字符串升序排序:输出:
参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR