【问题标题】:How to cat using part of a filename in terminal?如何在终端中使用文件名的一部分进行分类?
【发布时间】:2014-10-20 00:17:45
【问题描述】:

我在 OS 10.X 上使用终端。我有一些格式的数据文件:

mbh5.0_mrg4.54545454545_period0.000722172513951.params.dat
mbh5.0_mrg4.54545454545_period0.00077271543854.params.dat
mbh5.0_mrg4.59090909091_period-0.000355232058085.params.dat
mbh5.0_mrg4.59090909091_period-0.000402015664015.params.dat

我知道在 mbh 和 mrg 之后会有一些编号相似的文件,但我不会提前知道编号是多少或会有多少编号相似的文件。我的目标是将 mbh 和 mrg 之后具有相似数字的所有文件中的所有数据分类到一个数据文件中。所以从上面我想做类似的事情......

cat mbh5.0_mrg4.54545454545*dat > mbh5.0_mrg4.54545454545.dat
cat mbh5.0_mrg4.5909090909*dat > mbh5.0_mrg4.5909090909.dat

我想自动化这个过程,因为会有很多这样的文件。 最好的方法是什么?我一直在研究 sed,但我还没有解决方案。

【问题讨论】:

    标签: unix sed terminal


    【解决方案1】:
    for file in *.params.dat; do
        prefix=${file%_*}
        cat "$file" >> "$prefix.dat"
    done
    

    这部分${file%_*} 删除$file 末尾的last 下划线和后面的文本,并将结果保存在prefix 变量中。 (参考:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion

    【讨论】:

      【解决方案2】:

      我不是 100% 清楚您在这里要实现的目标,但如果您想将文件聚合到“mbh5.0_mrg4”之后具有相同编号的文件中。那么您可以执行以下操作。

      ls -l mbh5.0_mrg4* | awk'{打印“猫”$9“>mbh5.0_mrg4。” substr($9,12,11) ".dat" }' | /bin/bash

      “ls -s”列出文件,“awk”从 ls 的结果中获取第 9 列。通过一些字符串连接,结果将传递给 /bin/bash 以执行。

      这是一个 linux bash 脚本,所以假设你有 /bind/bash,我不是 100% 熟悉 OS X。这个脚本还假设你分组的数字总是在文件名中的同一个位置。我认为您可以将 /bin/bash 更改为您已安装的几乎任何 shell。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-26
        • 1970-01-01
        • 1970-01-01
        • 2023-01-09
        • 2015-06-08
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        相关资源
        最近更新 更多