2015-05-18 36 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平均中值下四分位數上四分第10百分位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塊在您的文件的任何行被處理之前執行。當其他模式匹配時,這些字段將保存到變量fnts以供稍後使用。當最終模式匹配時,打印該行。

當然,這會產生一些假設,例如所有文件都按相同順序包含數據。

根據目錄結構的細節並假設您的shell支持它,您可能能夠將所有文件傳遞給腳本,如awk '...' **/fastqc_data.txt。這使用「globstar」shell功能以名稱fastqc_data.txt遞歸匹配所有文件,並將它們全部傳遞給awk腳本。

+0

完美,非常感謝。如所建議的那樣,自定義目錄路徑是最後一個簡單的步驟。 – Sarah