首页 > 解决方案 > awk中的gsub与变量

问题描述

我想用以“>”开头并以“.”结尾的变量名替换“>”。但是下面的代码没有打印变量名。

for f in *.fasta; 
do  
nam=$(basename $f .fasta);
awk '{print $f}' $f | awk '{gsub(">", ">$nam."); print $0}'; done

第一个文件的输入sample01.fasta

sample01.fasta

 >textofDNA
 ATCCCCGGG
 >textofDNA2
 ATCCCCGGGTTTT

预期输出:

 >sample01.textofDNA
 ATCCCCGGG
 >sample01.textofDNA2
 ATCCCCGGGTTTT

标签: linuxawkgsub

解决方案


$ awk 'FNR==1{fname=FILENAME; sub(/[^.]+$/,"",fname)} sub(/^>/,""){$0=">" fname $0} 1' *.fasta
>sample01.textofDNA
ATCCCCGGG
>sample01.textofDNA2
ATCCCCGGGTTTT

与您迄今为止获得的其他答案相比,上述内容适用于任何 awk,每个输入文件只计算一次文件名,而不是每行一次或每行一次>,如果文件名包含other .,如果文件名包含&不会失败,如果文件名不包含字符串fasta..不会失败


推荐阅读