2015-05-18 3 views
1

У меня есть ~ 200 текстовых файлов размером около 10Kb каждый, и все они называются fastqc_data.txt, каждый в другом подкаталоге. Файлы были созданы третьей стороной. Верх каждого файла показан ниже. Моя цель - создать новый файл, первый столбец которого будет содержать значение «Имя файла» (в этом примере «1265-H19_AGGCAG_L007_R1_001.fastq», второй столбец будет содержать значение «Всего последовательностей» («41284554») и третий столбец будет содержать значение "длины последовательности" ("100")bash: извлекать значения в таблицу

Пример входного файла 1:.

FastQC 0.10.1 
Basic Statistics pass  
Measure  Value 
Filename  1265-H19_AGGCAG_L007_R1_001.fastq  
File type  Conventional base calls 
Encoding  Sanger/Illumina 1.9 
Total Sequences 41284554   
Filtered Sequences  0  
Sequence length 100  
%GC  41  
END_MODULE 

Пример выходного файла:

Filename Total.Sequences Sequence.length 
1265-H19_AGGCAG_L007_R1_001.fastq 41284554 100 
1265-H20_TTTCAG_L007_R1_001.fastq 51387564 103 
1265-H21_CGGTTG_L007_R1_001.fastq 33254771 96 
+0

Это все содержимое одного файла? Наверное, нет, если вы говорите, что они 10kb каждый. –

+0

Это не все содержимое файла. Больше об этом выглядит следующим образом: последовательностей помечены как плохое качество 0 длина последовательности 100 % GC 40 >> END_MODULE >> За базовую последовательность качества прохода #Base Средней Медиана Нижной квартиль Верхний квартиль десятого процентиль 90-й процентиль 1 32.22927768362192 33,0 31,0 34,0 31,0 34,0 2 32.471828039631184 34,0 31,0 34,0 31,0 – Sarah

+0

Это очень непроницаемо в комментарии ... важно знать, являются ли линии, которые вы показали, достаточно уникальными. Например, есть ли другие строки в файле, которые начинаются так же, как и те, которые вы пытаетесь сопоставить? Кстати, вы пробовали код в моем ответе? –

ответ

1

Вы можете превратить ваш введите в строку вывода с помощью awk-скрипта следующим образом:

awk 'BEGIN{print "Filename Total.Sequences Sequence.length"} 
    /^Filename/{fn=$2} 
    /^Total Sequences/{ts=$3} 
    /^Sequence length/{print fn,ts,$3}' input_file 

Блок BEGIN выполняется перед обработкой любых строк вашего файла. Когда другие шаблоны сопоставляются, поля сохраняются в переменных fn и ts, которые будут использоваться позже. Когда последний шаблон совпадает, строка печатается.

Конечно, это делает ряд предположений, например, что все файлы содержат данные в том же порядке.

В зависимости от деталей структуры вашего каталога и при условии, что ваша оболочка поддерживает его, вы можете передать все файлы сценарию, например awk '...' **/fastqc_data.txt. Это использует функцию оболочки «globstar», чтобы рекурсивно сопоставлять все файлы с именем fastqc_data.txt и передавать их всем скрипту awk.

+0

Отлично, спасибо большое. Как и было предложено, настройка пути к каталогу является окончательным простым шагом. – Sarah

Смежные вопросы