fastp质控结果文件如下
查看内容格式,目标是提取过滤后reads相关信息
处理过程
ls ./*json | while read i
do
sed -n '/"after_filtering": {/,/}/p' $i | sed 's/\t//g' | sed 's/"//g' | grep -E '^total_reads:|^q30_rate:|^gc_content' | cut -f 2 -d ":" | sed 's/,//g' | tr '\n' '\t'| sed '1s/$/\n/' > $(basename $i "json")txt
done
for file in *txt; do awk -v fname="$file" '{print $0, fname}' "$file" > "$file.tmp" && mv "$file.tmp" "$file"; done
ls ./*txt | while read i
do
sed -i 's/.txt//g' $i
awk '{print $4,$1,$2,$3}' $i > temp_file.txt && mv temp_file.txt $i
sed -i 's/ /\t/g' $i
done
cat *txt > merge_reads
代码解读
ls ./*json | while read i: 这一行列出当前目录下所有以 .json 结尾的文件,并逐行读取它们。
sed -n '/"after_filtering": {/,/}/p' $i: 提取 JSON 文件中 after_filtering 字段的内容,并打印出来。
sed 's/\t//g' | sed 's/"//g': 去除制表符和双引号。
grep -E '^total_reads:|^q30_rate:|^gc_content': 筛选出包含 total_reads, q30_rate, 和 gc_content 的行。
cut -f 2 -d ":": 按照冒号分割并提取第二个字段。
sed 's/,//g': 去除逗号。
tr '\n' '\t': 将换行符替换为制表符。
sed '1s/$/\n/' > $(basename $i "json")txt: 在第一行末尾添加换行符,并将结果输出到以 .txt 结尾的文件中,文件名与对应的 JSON 文件相同。
for file in *txt; do awk -v fname="$file" '{print $0, fname}' "$file" > "$file.tmp" && mv "$file.tmp" "$file"; done: 遍历所有以 .txt 结尾的文件,并使用 awk 在每行末尾添加文件名。
ls ./*txt | while read i: 这一行列出当前目录下所有以 .txt 结尾的文件,并逐行读取它们。
sed -i 's/.txt//g' $i: 去除文件名中的 .txt 后缀。
awk '{print $4,$1,$2,$3}' $i > temp_file.txt && mv temp_file.txt $i: 重新排列每行的顺序,并将结果保存到临时文件中,然后再将临时文件重命名为原文件。
sed -i 's/ /\t/g' $i: 将空格替换为制表符。
cat *txt > merge_reads: 最后这一行将所有处理后的文本文件合并成一个名为 merge_reads 的文件。
结果展示
#第一列文件对应的文件名,第二列clean reads,第三列Q30,第四列GC content
$head merge_reads
SRR10518003 48795724 1 0.438863
SRR10518004 52575992 0.92425 0.463813
SRR10518005 45639076 1 0.435784
SRR10518006 46367784 1 0.442649
SRR10518007 53639998 1 0.437025
SRR10518016 53665346 1 0.441168
SRR10518027 48863392 1 0.43905
SRR10518038 48457916 1 0.448112
SRR10518043 40582672 1 0.439502
SRR10518044 37617796 0.889301 0.460502
根据以上代码也可以灵活提取该文件的其余目标内容