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