파일 그룹을 하나로 묶는 가장 쉬운 방법은 무엇입니까?


1

이 패턴의 명명 규칙을 가진 파일이 있습니다.

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 스크립트로 어떻게 이것을 달성 할 수 있습니까?


주어진 그룹에 항상 정확히 세 개의 파일이 있습니까? 파일의 개수가 변수 인 경우, 그럴 필요 않습니다 bond_7.LEU.CA.1_3.dat또는 것 bond_7.LEU.CA.dat또한합니까? 후자가 더 쉽습니다.
Dennis

답변:


2

제공 한 예제가 모든 파일을 반영한다고 가정하면 다음을 수행해야합니다.

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

이를 위해서는 각 그룹에 확장자가 .1.dat 인 파일이 있어야합니다.


0
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 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.