ファイルのグループをまとめて「cat」する最も簡単な方法は何ですか?

ファイルのグループをまとめて「cat」する最も簡単な方法は何ですか?

次のパターンの命名規則を持つファイルがあります:

bond_7.LEU.CA.1.dat
bond_7.LEU.CA.2.dat
bond_7.LEU.CA.3.dat
bond_12.ALA.CB.1.dat
bond_12.ALA.CB.2.dat
bond_12.ALA.CB.3.dat
...

同じグループのすべてのファイルを 1 つに連結したいです。例:

cat bond_7.LEU.CA.*.dat > ../bondvalues/bond_7.LEU.CA.1_3.dat

このようなファイルは多数あります。これを bash スクリプトで実現するにはどうすればよいでしょうか?

答え1

提供した例がすべてのファイルを反映していると仮定すると、次の操作で問題が解決するはずです。

for f in *.1.dat
do
  cat ${f%%1.dat}* > ${f%%1.dat}1_3.dat
done

これには、各グループに .1.dat 拡張子を持つファイルが含まれている必要があります。

答え2

printf "%s\n" * | cut -d. -f1-3 | sort -u | while read prefix; do
  files=(${prefix}*)
  first=$(cut -d. -f4 <<< "${files[0]}")
  last=$(cut -d. -f4 <<< "${files[${#files[@]}-1]}")
  newfile=$(printf "../bondvalues/%s.%s_%s.dat" "$prefix" "$first" "$last")
  cat "${files[@]}" > "$newfile"
done 

関連情報