【问题标题】:how to sort this in bash如何在bash中对此进行排序
【发布时间】:2016-01-28 23:40:24
【问题描述】:

您好,我有一个包含以下行的文件:

apple
12
orange
4
rice
16

如何使用 bash 按数字排序? 假设每个数字是上述对象的价格。

我希望它们的格式如下:

12 apple
4 orange
16 rice

apple 12
orange 4
rice 16  

谢谢

【问题讨论】:

    标签: linux bash command-line


    【解决方案1】:

    一个解决方案,使用paste + sort 让每个产品按价格排序

    $ paste - -  < file|sort -k 2nr
    rice    16
    apple   12
    orange  4
    

    说明

    来自paste男人

    写出由顺序对应的行组成的行 每个 FILE,由 TAB 分隔,输出到标准输出。 没有文件,或 当 FILE 为 - 时,读取标准输入。

    paste 获取来自stdin 的流(你的 &lt;file)并计算出每一行属于虚构 归档由 - 表示,所以我们使用 - - 得到 两个

    sort 使用标志-k 2nr 得到paste 输出倒数顺序按第二列排序

    【讨论】:

      【解决方案2】:

      你可以使用 awk:

      awk '!(NR%2){printf "%s %s\n" ,$0 ,p}{p=$0}' inputfile
      

      (略微改编自this answer

      如果你想在之后对输出进行排序,你可以使用sort(非常合乎逻辑):

      awk '!(NR%2){printf "%s %s\n" ,$0 ,p}{p=$0}' inputfile | sort -n
      

      这将给出:

      4 orange
      12 apple
      16 rice
      

      【讨论】:

        【解决方案3】:

        使用awk的另一种解决方案

        $ awk '/[0-9]+/{print prev, $0; next} {prev=$0}' input
        apple 12
        orange 4
        rice 16
        

        【讨论】:

          【解决方案4】:
          while read -r line1 && read -r line2;do
              printf '%s %s\n' "$line1" "$line2"
          done < input_file
          

          如果您希望按价格对行进行排序,请将结果通过管道传输到sort -k2

          while read -r line1 && read -r line2;do
              printf '%s %s\n' "$line1" "$line2"
          done < input_file | sort -k2
          

          【讨论】:

            猜你喜欢
            • 2011-11-18
            • 2014-02-23
            • 1970-01-01
            • 2017-03-16
            • 2018-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-19
            相关资源
            最近更新 更多