파일 그룹을 함께 '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
...

같은 그룹의 모든 파일을 하나로 연결하고 싶습니다. 예를 들어:

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 

관련 정보