Linux - 根据带标题和尾部的键位置对文件进行排序

时间:2014-03-12 04:19:10

标签: regex linux sorting unix grep

下面给出了需要在Linux中排序的文件(unsorted-file)中的列表,最好是单行linux命令。

03123456789abcd
02987654321pqrs
02123456789mnop
03987654321stuv
04123456789ghjk
01000000000
99000000000
97000000000
98000000000

必需的排序文件输出:

01000000000
02123456789mnop
03123456789abcd
04123456789ghjk
02987654321pqrs
03987654321stuv
97000000000
98000000000
99000000000

要求:

  • 如果前两个char为01则为标题
  • 如果前两个字符大于90,那么它们就是预告片
  • 排序顺序:位置3 - 11,然后是位置1 - 2

我尝试了一个像

这样的简单排序命令
$sort unsorted-file > sorted-file. 

要求3失败。然后我试了

$sort -k 1.3, 1.11 -k 1.2 unsorted-file > sorted-file

由于位置3的全部为零,预告片记录将其置于文件的顶部。

我知道的其他选项是删除标题和预告片;对文件进行排序并合并标头和预告片文件。有没有办法在一个linux(复杂)命令本身?

感谢您的时间。

-R -

1 个答案:

答案 0 :(得分:1)

( grep '^01' unsorted-file
  grep -E -v '^(01|9)' unsorted-file | sort -k 1.3,1.11 -k 1.1
  grep '^9' unsorted-file ) > sorted-file