bash:将值提取到表中

时间:2015-05-18 12:06:09

标签: bash

我有大约200个文本文件,每个文件大小约10Kb,所有文件都名为fastqc_data.txt,每个文件位于不同的子目录中。这些文件是由第三方生成的。每个文件的顶部如下所示。我的目标是生成一个新文件,其第一列将包含“文件名”值(在此示例中为“1265-H19_AGGCAG_L007_R1_001.fastq”,第二列将包含“总序列”值(“41284554”),第三列将包含“序列长度”(“100”)的值。

示例输入文件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

1 个答案:

答案 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脚本。