파일을 연결하고 다른 파일의 일치 항목을 기반으로 출력에 다른 이름을 지정하려면 어떻게 해야 합니까?

파일을 연결하고 다른 파일의 일치 항목을 기반으로 출력에 다른 이름을 지정하려면 어떻게 해야 합니까?

data다음과 같이 여러 개가 포함된 디렉토리가 있습니다 fastqs.

SRR13456784_1.fastq
SRR13456784_2.fastq
SRR13456784_3.fastq

SRR13456785_1.fastq
SRR13456785_2.fastq
SRR13456785_3.fastq

SRR13456786_1.fastq
SRR13456786_2.fastq
SRR13456786_3.fastq

SRR19876543_1.fastq
SRR19876543_2.fastq
SRR19876543_3.fastq

SRR19876544_1.fastq
SRR19876544_2.fastq
SRR19876544_3.fastq

details.txt두 개의 열이 있는 구분된 파일이 있습니다 ID and Sample. 일치하는 샘플의 ID를 fastqs와 연결하고 출력 샘플 이름을 지정하고 싶습니다.

    ID        Sample
SRR13456784 GJK1234567
SRR13456785 GJK1234567
SRR13456786 GJK1234567
SRR19876543 GJK2444103
SRR19876544 GJK2444103

내가 연결한 파일 중 하나는 다음과 같습니다.

cat SRR13456784_1.fastq SRR13456785_1.fastq SRR13456786_1.fastq > GSK1234567_1.fastq

cat SRR13456784_2.fastq SRR13456785_2.fastq SRR13456786_2.fastq > GSK1234567_2.fastq

cat SRR13456784_3.fastq SRR13456785_3.fastq SRR13456786_3.fastq > GSK1234567_3.fastq

위의 txt 파일은 예시이지만 원본 파일에는 50개의 샘플과 일치하는 300개의 ID가 있습니다.

누구든지 이 연결을 수행하고 단일 스크립트로 출력에 대한 샘플 이름을 제공하는 방법을 말해 줄 수 있습니까? 감사해요.

답변1

다음을 수행할 수 있습니다.

$ tail -n +2 details.txt | 
   while read -r id sample; do 
     for i in {1..3}; do 
       cat < "${id}_${i}".fastq >> "${sample}_${i}".fastq
     done
   done

tail +2제목을 건너 뛰어야 합니다 ( ID Sample). 그런 다음 나머지 행을 반복하고 해당 변수에 ID와 샘플을 저장한 다음 숫자 1부터 3까지 반복하고 관련 파일을 연결하는 두 번째 루프를 수행합니다. 예제 입력에서 실행할 명령은 다음과 같습니다.

$ tail -n +2 details.txt | while read -r id sample; do for i in {1..3}; do echo "cat \"${id}_${i}\".fastq >> \"${sample}_${i}\".fastq"; done; done
cat "SRR13456784_1".fastq >> "GJK1234567_1".fastq
cat "SRR13456784_2".fastq >> "GJK1234567_2".fastq
cat "SRR13456784_3".fastq >> "GJK1234567_3".fastq
cat "SRR13456785_1".fastq >> "GJK1234567_1".fastq
cat "SRR13456785_2".fastq >> "GJK1234567_2".fastq
cat "SRR13456785_3".fastq >> "GJK1234567_3".fastq
cat "SRR13456786_1".fastq >> "GJK1234567_1".fastq
cat "SRR13456786_2".fastq >> "GJK1234567_2".fastq
cat "SRR13456786_3".fastq >> "GJK1234567_3".fastq
cat "SRR19876543_1".fastq >> "GJK2444103_1".fastq
cat "SRR19876543_2".fastq >> "GJK2444103_2".fastq
cat "SRR19876543_3".fastq >> "GJK2444103_3".fastq
cat "SRR19876544_1".fastq >> "GJK2444103_1".fastq
cat "SRR19876544_2".fastq >> "GJK2444103_2".fastq
cat "SRR19876544_3".fastq >> "GJK2444103_3".fastq

관련 정보