Unix 如何在终端中使用部分文件名?

Unix 如何在终端中使用部分文件名?,unix,sed,terminal,Unix,Sed,Terminal,我正在使用OS10.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.000402015

我正在使用OS10.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,但我还没有解决方案

for file in *.params.dat; do
    prefix=${file%_*}
    cat "$file" >> "$prefix.dat"
done
此部分
${file%\u*}
删除$file结尾的最后一个下划线和后面的文本,并将结果保存在
前缀
变量中。(参考号:)

此部分
${file%\u*}
删除$file结尾的最后一个下划线和后面的文本,并将结果保存在
前缀
变量中。(参考号:)

此部分
${file%\u*}
删除$file结尾的最后一个下划线和后面的文本,并将结果保存在
前缀
变量中。(参考号:)


此部分
${file%\u*}
删除$file结尾的最后一个下划线和后面的文本,并将结果保存在
前缀
变量中。(参考:)

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

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

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


这是一个LinuxBash脚本,因此假设您有/bind/bash,我对OSX不是100%熟悉。该脚本还假设您分组的数字在文件名中始终位于同一位置。我认为您可以将/bin/bash更改为几乎所有已安装的shell。

我并不100%清楚您在这里试图实现的目标,但是如果您希望将文件聚合为一个在“mbh5.0\u mrg4”之后具有相同编号的文件,那么您可以执行以下操作

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

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


这是一个LinuxBash脚本,因此假设您有/bind/bash,我对OSX不是100%熟悉。该脚本还假设您分组的数字在文件名中始终位于同一位置。我认为您可以将/bin/bash更改为几乎所有已安装的shell。

我并不100%清楚您在这里试图实现的目标,但是如果您希望将文件聚合为一个在“mbh5.0\u mrg4”之后具有相同编号的文件,那么您可以执行以下操作

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

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


这是一个LinuxBash脚本,因此假设您有/bind/bash,我对OSX不是100%熟悉。该脚本还假设您分组的数字在文件名中始终位于同一位置。我认为您可以将/bin/bash更改为几乎所有已安装的shell。

我并不100%清楚您在这里试图实现的目标,但是如果您希望将文件聚合为一个在“mbh5.0\u mrg4”之后具有相同编号的文件,那么您可以执行以下操作

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

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

这是一个LinuxBash脚本,因此假设您有/bind/bash,我对OSX不是100%熟悉。该脚本还假设您分组的数字在文件名中始终位于同一位置。我认为您可以将/bin/bash更改为几乎所有已安装的shell