Получение разных выходных файлов
Я делаю тест с этими файлами:
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
).