【问题标题】:unix 'sort' command for inline characters用于内联字符的 unix 'sort' 命令
【发布时间】:2016-11-22 09:02:45
【问题描述】:

我有一个南瓜大小的 .txt 文件,我正在尝试按南瓜的大小对其进行排序:

name |size
==========
Joe  |5
Mary |10
Bill |2
Jill |1
Adam |20
Mar  |5
Roe  |10
Mir  |3
Foo  |9
Bar  |12
Baz  |0

目前我很难让sort 正常工作。谁能帮我在不修改列表结构的情况下按南瓜大小对列表进行排序?

【问题讨论】:

    标签: sorting unix command-line-interface


    【解决方案1】:

    表格标题需要特别考虑,因为“排序”它们会将它们移动到某个随机行。所以我们使用两步流程: a) 输出表格标题。 b) 对其余部分进行数字排序 (-n),反向 顺序 (-r),字段分隔符 | (-t),从字段 2 (-k) 开始

    $ awk 'NR<=2' in; awk 'NR>2' in | sort -t '|' -nr -k 2
    name |size
    ==========
    Adam |20
    Bar  |12
    Roe  |10
    Mary |10
    Foo  |9
    Mar  |5
    Joe  |5
    Mir  |3
    Bill |2
    Jill |1
    Baz  |0
    

    【讨论】:

      【解决方案2】:

      关键是sort的选项-k。您可以使用man sort 来查看它是如何工作的。您的问题的解决方案如下:

      sed -n '3,$p' YOUR_FILENAME| sort -hrt '|' -k 2
      

      【讨论】:

        【解决方案3】:

        你可以简单地删除

        name |size
        ==========
        

        通过使用sed 命令。然后可以使用sort 命令对剩下的任何内容进行排序。

        sed '1,2d' txt | sort -t "|" -k 2 -n

        这里,sed '1,2d' 将删除前 2 行。

        然后sort 将使用选项-t 标记字符'|' 上的数据。

        由于您想根据恰好是第二个标记的大小进行排序,因此可以通过sort-k 2 选项指定标记“大小”。

        最后,将“大小”视为数字,因此可以通过sort 的选项-n 指定。

        【讨论】:

        • 这是升序而不是降序。
        • @Jens:由于 OP 没有提到排序顺序,所以将其保留为默认升序。但是-r(反向或降序)选项可以在sort 命令中提供。
        【解决方案4】:

        您可以在 shell 中执行此操作:

        { read; echo "$REPLY"; read; echo "$REPLY"; sort -t'|' -k2n; } < pumpkins.txt
        

        读取并打印前 2 个标题行,然后对其余部分进行排序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-15
          • 1970-01-01
          • 2011-05-21
          • 1970-01-01
          • 2012-01-29
          • 2011-03-30
          • 1970-01-01
          • 2012-09-22
          相关资源
          最近更新 更多