如何对具有多个先决条件的字符串进行排序?

如何对具有多个先决条件的字符串进行排序?

我有很多字符串(大约~300 个),它们都是 4 个字母,因此 XYZA, ZHF3, RTt2 etc.我想根据 2 个要求对它们进行排序。

  1. 按最后 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 个字母相同的行将方便地保留它们在第一步中的顺序。

相关内容