【问题标题】:Bash and sort files in order按顺序对文件进行 Bash 和排序
【发布时间】:2010-12-17 08:25:48
【问题描述】:

使用之前的 bash 脚本,我创建了一个文件列表:

data_1_box
data_2_box
...
data_10_box
...
data_99_box

问题是现在我需要连接它们,所以我尝试了

ls -l data_*

但我明白了

.....
data_89_box
data_8_box
data_90_box
...
data_99_box
data_9_box

但我需要加入 1,2,3,4,..9,...,89,90,91,...,99

可以在 bash 中完成吗?

【问题讨论】:

    标签: bash sorting


    【解决方案1】:

    这是一个通用的答案!您必须将规则应用于特定的数据集

    ls | sort
    

    例子:

    ls | sort -n -t _ -k 2
    

    【讨论】:

    • -1 ?我改为-l,但我没有按那个顺序得到结果
    • 如果尝试 ls -1 | sort -n 我得到 ... data_89_box data_90_box ... data_99_box data_9_box (end) 但我希望它们按顺序排列
    • 好吧,actual 是在 puppes 的回答中,这更像是对您需要使用什么的提示。
    • 我修改了我的答案以反映它本质上是通用的。
    【解决方案2】:
    ls data_* | sort -n -t _ -k 2
    

    -n:按数字排序
    -t:字段分隔符'_'
    -k:在第二个字段上排序,在你的情况下是第一个'_'之后的数字

    【讨论】:

    • 我已经使用sort 很多年了,从来没有费心去阅读手册页——看来我真的错过了。谢谢! :-)
    【解决方案3】:

    如果您的sort 有版本排序,请尝试:

    ls -1 | sort -V
    

    (这是大写的 V)。

    【讨论】:

    • 简洁有效,节省了我很多时间!
    【解决方案4】:

    -v 标志用于ls 怎么样?该标志的目的是根据版本号对文件进行排序,但在这里也可以正常工作,并且无需将结果通过管道传递给sort

    ls -lv data_*
    

    【讨论】:

      【解决方案5】:

      我能想到的一个建议是:

      for i in `seq 1 5`
      do  
         cat "data_${i}_box"
      done
      

      【讨论】:

        【解决方案6】:

        如果您的排序没有版本排序,那么这是在 bash 中执行此操作的方法:

        cat <your_former_ls_output_file> | awk ' BEGIN { FS="_" } { printf( "%03d\n",$2) }' | sort | awk ' { printf( "data_%d_box\n", $1)  }'
        

        全部在一条线上。请记住,我尚未在您的特定数据上对此进行测试,因此可能需要进行一些调整才能正常工作。不过,这概述了一个良好、强大且相对简单的解决方案。当然,您始终可以将开头的 cat+filename 与实际的 ls 交换以动态创建文件数据。要捕获实际的文件名列,您可以在正确的 ls 参数或通过 cut 或 awk 的管道之间进行选择。

        【讨论】:

          【解决方案7】:

          也许你会喜欢SistemaNumeri.py(“固定号码”):它会重命名你的

          data_1_box
          data_2_box
          ...
          data_10_box
          ...
          data_99_box
          

          data_01_box
          data_02_box
          ...
          data_10_box
          ...
          data_99_box
          

          【讨论】:

            【解决方案8】:

            我的文件夹中有文件,需要根据编号对它们进行排序。例如。 -

            abc_dr-1.txt
            hg_io-5.txt
            kls_er_we-3.txt
            sd-4.txt
            sl_rt_we_yh-2.txt
            

            我需要根据数字对它们进行排序。 所以我用这个来排序。

            ls -1 | sort -t '-' -nk2
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-07-08
              • 1970-01-01
              • 1970-01-01
              • 2012-08-09
              相关资源
              最近更新 更多