我有一个包含如下行的文件:
8 GeodeticCorrosiveness-4096
8 MetricalDrosky-4096
8 UncontrovertiblePhoebus-4096
9 FlabbyAutochthones-4096
9 UndispensedCreeds-4096
9 WaltonianAtomicities-4096
10 AtheismDuumvirate-4096
10 HeliocentricAllative-4096
10 HepaticPhaedra-4096
11 High-speedBuchan-4096
我想制作这样的东西:
8 8 GeodeticCorrosiveness-4096
8 8 MetricalDrosky-4096
8 8 UncontrovertiblePhoebus-4096
5 9 FlabbyAutochthones-4096
5 9 UndispensedCreeds-4096
5 9 WaltonianAtomicities-4096
2 10 AtheismDuumvirate-4096
2 10 HeliocentricAllative-4096
2 10 HepaticPhaedra-4096
1 11 High-speedBuchan-4096
即,按第一列降序排序时每行的序数分类。 unix 中有什么可以帮助 shell 脚本做到这一点吗?
答案1
这看起来像是一个简短的 awk 脚本,sort
可以执行以下操作:
$ sort -srn file.txt | awk '{if ($1 != prev) num=NR; print num, $0; prev=$1}' | sort -srn
8 8 GeodeticCorrosiveness-4096
8 8 MetricalDrosky-4096
8 8 UncontrovertiblePhoebus-4096
5 9 FlabbyAutochthones-4096
5 9 UndispensedCreeds-4096
5 9 WaltonianAtomicities-4096
2 10 AtheismDuumvirate-4096
2 10 HeliocentricAllative-4096
2 10 HepaticPhaedra-4096
1 11 High-speedBuchan-4096
两个调用sort
首先对列表进行排序,最后反转,而 awk 脚本只是查看第一个字段以确定它是否已更改,并打印看到新值的最后一个行号。