我有很多字符串(大约~300 个),它们都是 4 个字母,因此
XYZA, ZHF3, RTt2 etc.
我想根据 2 个要求对它们进行排序。
- 按最后 2 个字母的顺序排序
- 根据前两个字母对包含相同后两个字母的单词进行排序
这意味着我有 XXYY 格式的字符串,并想按照显示的规则对它们进行排序。
我正在尝试这样做,sort -k.1.3,1.4
但相同的项是随机排序的,例如15AA, a2AA, 0CAA etc.
我该如何摆脱它?
答案1
-k
可以多次使用。当有多个键字段时,只有在所有较早的键都相等的情况下,才会比较后面的键。
<datafile sort -k 1.3,1.4 -k 1.1,1.2
请记住,排序取决于LC_COLLATE
。
答案2
执行相反的操作——首先按前两个字母,然后是最后两个字母。我认为你甚至可以这样做:
cat file | sort | sort -k 1.3 -s
该sort
命令可以执行稳定的排序,即如果两行“相等”,它将保留它们之间的相对顺序。因此在第二步中,第 3 至第 4 个字母相同的行将方便地保留它们在第一步中的顺序。