【问题标题】:Linux - Sort a File based on key position with header and trailerLinux - 根据带有标题和尾部的关键位置对文件进行排序
【发布时间】:2014-03-12 04:19:10
【问题描述】:

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

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

所需的排序文件输出:

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

要求:

  • 如果前两个字符是 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-

【问题讨论】:

    标签: regex linux sorting unix grep


    【解决方案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
    

    【讨论】:

    • 谢谢巴马尔。我也调整了您的命令以对拖车行进行排序。 (grep '^01' unsorted-file grep -E -v '^(01|9)' unsorted-file | sort -k 1.3,1.11 -k 1.1 grep '^9' unsorted-file | sort -k 1.2 ) > sorted-file
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多