¿Cuál es la forma más sencilla de unir grupos de archivos?

¿Cuál es la forma más sencilla de unir grupos de archivos?

Tengo archivos con convención de nomenclatura de este patrón:

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

Quiero concatenar todos los archivos del mismo grupo en uno solo. Por ejemplo:

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

Hay una gran cantidad de estos archivos. ¿Cómo se puede lograr esto con un script bash?

Respuesta1

Suponiendo que el ejemplo que proporciona refleja todos sus archivos, lo siguiente debería funcionar:

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

Esto requiere que cada grupo contenga un archivo con la extensión .1.dat.

Respuesta2

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 

información relacionada