linux - 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
解决方案
$ awk 'FNR==1{fname=FILENAME; sub(/[^.]+$/,"",fname)} sub(/^>/,""){$0=">" fname $0} 1' *.fasta
>sample01.textofDNA
ATCCCCGGG
>sample01.textofDNA2
ATCCCCGGGTTTT
与您迄今为止获得的其他答案相比,上述内容适用于任何 awk,每个输入文件只计算一次文件名,而不是每行一次或每行一次>
,如果文件名包含other .
,如果文件名包含&
不会失败,如果文件名不包含字符串fasta
..不会失败
推荐阅读
- css - 排除带有 :not 在网格布局中的元素
- php - 如何根据事件数和日期从 html 表单向 mysqli 插入多条记录
- python - Pandas 时间序列按月份和按列分组重采样
- javascript - JQuery 验证器不会验证表单,除非输入填充了所需的值并发送一次
- r - 根据 data.frame 中的一组从行块中删除重复项
- html - 跨度类上的 ImportXML- xpathquery
- kubernetes - 在 AKS 中替换集群管理员的命令序列(使用 RBAC)
- php - 如何使用id在foreach中创建多个函数?
- nlp - 从语言生成语法
- mysql - 如果我有两个 substring_index,首先执行哪个?