i有200个文本文件,每个大小约为10kb,均为fastqc_data.txt
,每个命名为CC_1,每个分别在不同的子目录中。这些文件是由第三方生成的。每个文件的顶部如下所示。我的目的是生成一个新文件,第一列将包含"文件名"值(在此示例" 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
您可以使用这样的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" shell功能将所有文件递归匹配,并将其全部传递给AWK脚本。