파일 이름의 일부를 무시하는 방법

파일 이름의 일부를 무시하는 방법

이 질문이 이전에 요청되었다면 죄송합니다. 나는 이 모든 것에 대해 매우 새로운 것입니다.

R1특정 파일 이름 위치를 포함하는 다른 폴더의 모든 파일을 연결하고 싶습니다 . 일부 파일 이름이 다르기 때문에 지금까지의 시도가 작동하지 않습니다.S번호.

폴더 1

952_56890_S91_combined_L001_R1_001.fastq.gz
952_56890_S91_combined_L001_R2_001.fastq.gz
952_53929_S92_combined_L001_R1_001.fastq.gz
952_53929_S92_combined_L001_R2_001.fastq.gz

폴더 2

952_56890_S125_combined_L001_R1_001.fastq.gz
952_56890_S125_combined_L001_R2_001.fastq.gz
952_53929_S126_combined_L001_R1_001.fastq.gz
952_53929_S126_combined_L001_R2_001.fastq.gz

답변1

$ cat 952_53929_S*R1._001.fastq.gz >> 파일 이름

답변2

예시 이름이 몇 개만 있는 경우 수동으로 이 작업을 수행할 수 있습니다.

cat folder*/952_53929_S*_R1_*.fastq.gz > 952_53929_combined_L001_R1_001.fastq.gz
cat folder*/952_53929_S*_R2_*.fastq.gz > 952_53929_combined_L001_R2_001.fastq.gz
cat folder*/952_56890_S*_R1_*.fastq.gz > 952_56890_combined_L001_R1_001.fastq.gz
cat folder*/952_56890_S*_R2_*.fastq.gz > 952_56890_combined_L001_R2_001.fastq.gz

더 많으면 별로 실용적이지 않습니다. 따라서 이름을 직접 수집할 수 있습니다.

$ for f in */952_*.fastq.gz; do fname=$(basename "$f"); echo ${fname%%_S*} ; done | sort | uniq
952_53929
952_56890

그러면 다음과 같은 작업을 수행할 수 있는 접두사가 제공됩니다.

for f in */952_*.fastq.gz; do 
    fname=$(basename "$f"); 
    echo ${fname%%_S*} ; 
done | 
    sort | 
        uniq | 
            while read prefix; do 
                cat */"$prefix"*_R1_*.fastq.gz > "$prefix"_combined_L001_R1_001.fastq.gz; 
                cat */"$prefix"*_R2_*.fastq.gz > "$prefix"_combined_L001_R2_001.fastq.gz; 
            done

관련 정보