Получение разных выходных файлов

Я делаю тест с этими файлами:

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq1_Glicose_1_ACTTGA_merge_R2_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R2_001.fastq
comp995_c0_seq1_Glicose_1_ACTTGA_merge_R2_001.fastq
comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq
comp995_c0_seq1_Xilano_1_AGTCAA_merge_R2_001.fastq

Я хочу получить файлы с одинаковым кодом до первого _ (подчеркивание) и с кодом R1 в разных выходных файлах. Выходные файлы должны вызываться в соответствии с кодом до первого _ (подчеркивание).

-Это мой код, но у меня проблемы с созданием выходных файлов.

#!/bin/bash

for i in {900..995}; do
    if [[ ${i} -eq ${i} ]]; then
        cat comp${i}_*_R1_001.fastq
    fi
done

-Я хочу иметь два выхода:

Один выход будет иметь все строки из:

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq

и его имя должно быть comp900_R1.out

Другой вывод будет содержать строки из:

comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq

и его имя должно быть comp995_R1.out

Наконец, как я уже сказал, это небольшой тест. Я хочу, чтобы мой скрипт работал с множеством файлов с одинаковыми характеристиками.

2 ответа

Решение

С помощью awk:

ls -1 *.fastq | awk -F_ '$8 == "R1" {system("cat " $0 ">>" $1 "_R1.out")}'

Список всех файлов *.fastq в awk, разделив на _, Проверьте, 8-я часть $8 является R1, а затем добавить cat >> файл в первую часть $1 + _R1.out, которые будут comp900_R1.out или же comp995_R1.out, Предполагается, что никакие имена файлов не содержат пробелов или других специальных символов.

Результат:

файл comp900_R1.out содержащий все строки из

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq

и файл comp995_R1.out содержащий все строки из

comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq

Мой удар по общему решению:

#!/bin/bash

for f in *_R1_*; do
   code=$(echo $f | cut -d _ -f 1)
   cat $f >> ${code}_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq
done

Перебирает файлы с _R1_ в нем, а затем добавляет свой вывод в файл на основе code,

cut вытаскивает код, разделив имя файла (-d _) и возвращая первое поле (-f 1).

Другие вопросы по тегам