將文件組「整理」在一起的最簡單方法是什麼?

將文件組「整理」在一起的最簡單方法是什麼?

我有具有此模式命名約定的檔案:

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
...

我想將同一組的所有檔案連接成一個檔案。例如:

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 

相關內容