AWK打印字符串的组合+;bash变量+;一串

AWK打印字符串的组合+;bash变量+;一串,awk,fasta,Awk,Fasta,我试图用隔离ID重命名fasta文件中的接触,并使用awk将接触编号从1到n 快速文件: >NODE_1_length_172477_cov_46.1343 GCAGGGCGCAGTTTTTGGAGGCTTGGCAAACCCGTGAGGGAAATTTGGCAGGCAAAATTT TGGCGGTCGTGCCGAAAAAAGCGGAGGCGATTTCAAATAAATTGTTTTTCACACATCATC CCAAGCGGCAGACGGAGTTTGCAGTCGGACAAATCAGG

我试图用隔离ID重命名fasta文件中的接触,并使用awk将接触编号从1到n

快速文件:

  >NODE_1_length_172477_cov_46.1343
  GCAGGGCGCAGTTTTTGGAGGCTTGGCAAACCCGTGAGGGAAATTTGGCAGGCAAAATTT
  TGGCGGTCGTGCCGAAAAAAGCGGAGGCGATTTCAAATAAATTGTTTTTCACACATCATC
  CCAAGCGGCAGACGGAGTTTGCAGTCGGACAAATCAGGCAAGGGCGCGCAGAGTAAGTCA
隔离ID是一个变量,因为我要对多个文件执行此操作。我已经到了打印isolateID号的地步,但我需要>isolateID\u号

    for file in /dir/*.fasta
    do
        name=$(basename "$file" .fasta)
        awk '/^>/{print "'"$name"'" ++i; next}{print}' $file > rename.fasta
    done;
这给了我:

 15AR07771
 GCAGGGCGCAGTTTTTGGAGGCTTGGCAAACCCGTGAGGGAAATTTGGCAGGCAAAATTT
 TGGCGGTCGTGCCGAAAAAAGCGGAGGCGATTTCAAATAAATTGTTTTTCACACATCATC
 CCAAGCGGCAGACGGAGTTTGCAGTCGGACAAATCAGGCAAGGGCGCGCAGAGTAAGTCA
期望输出:

 >15AR0777_1
 GCAGGGCGCAGTTTTTGGAGGCTTGGCAAACCCGTGAGGGAAATTTGGCAGGCAAAATTT
 TGGCGGTCGTGCCGAAAAAAGCGGAGGCGATTTCAAATAAATTGTTTTTCACACATCATC
 CCAAGCGGCAGACGGAGTTTGCAGTCGGACAAATCAGGCAAGGGCGCGCAGAGTAAGTCA
问题是,我应该将字符串放在哪里,以便它将打印>15AR0777_1而不是15AR07771

我尝试了以下几种变体,但都不起作用

  awk '/^>/{print ">'"$name"'" "_" ++i; next}{print}' $file > rename.fasta
  awk '/^>/{print ">'"$name"'" _++i; next}{print}' $file > rename.fasta
谢谢

使用
awk-v awk_var=“$bash_bar”
将shell变量传输到awk脚本中<代码>人工awk:

-v var=val
--assign var=val
       Assign the value val to the variable var, before execution of the program begins.  Such variable values are available to the
       BEGIN rule of an AWK program.
即:

dir/*.fasta中文件的

做
name=$(basename“$file.fasta)
awk-v name=“$name”/^>/{print”>“name”“++i;next}{print}'$file>rename.fasta
完成
以下是它的全awk版本:

awk'
FNR==1{#新建文件,关闭旧文件并命名新文件
关闭(f)#关闭旧的输出文件
n=FILENAME#获取新文件的文件名
gsub(/^.*\/\.fasta$/,“”,n)#删除路径和.fasta
f=“rename_u“n”.fasta”#新的输出文件
}
/^>/ {
$0=“>”n”++i#>名称(编号)
}
{
打印>f#打印到输出文件
}'dir/*.fasta#process.fasta文件在dir中
如果存在文件
dir/15AR07771.fasta
,脚本将生成该文件的
/rename\u 15AR07771.fasta
。(您的版本将所有输出文件写入
rename.fasta
,甚至不附加,您可能需要修复它。)

使用
awk-v awk_var=“$bash_bar”
将shell变量传输到awk脚本中<代码>人工awk:

-v var=val
--assign var=val
       Assign the value val to the variable var, before execution of the program begins.  Such variable values are available to the
       BEGIN rule of an AWK program.
即:

dir/*.fasta中文件的

做
name=$(basename“$file.fasta)
awk-v name=“$name”/^>/{print”>“name”“++i;next}{print}'$file>rename.fasta
完成
以下是它的全awk版本:

awk'
FNR==1{#新建文件,关闭旧文件并命名新文件
关闭(f)#关闭旧的输出文件
n=FILENAME#获取新文件的文件名
gsub(/^.*\/\.fasta$/,“”,n)#删除路径和.fasta
f=“rename_u“n”.fasta”#新的输出文件
}
/^>/ {
$0=“>”n”++i#>名称(编号)
}
{
打印>f#打印到输出文件
}'dir/*.fasta#process.fasta文件在dir中

如果存在文件
dir/15AR07771.fasta
,脚本将生成该文件的
/rename\u 15AR07771.fasta
。(您的版本将所有输出文件写入
rename.fasta
,甚至不添加,您可能需要修复它。)

谢谢您的帮助,它可以正常工作。我知道我的代码现在会覆盖每个文件的rename.fasta,这只是出于测试目的。不过我有一个问题,因为我在awk中找到了-v var=val选项,我尝试了以下方法:
awk-v var=“$name”/^>/{print var++I;next}{print}'$file>rename.fasta
,但除了一些隐藏的.nfs000文件之外,它没有产生任何输出,所以基本上我使用了与您的版本相同的方法,只是我没有使用“>”和“\u001”。你知道它为什么会这样吗?@chu esr显然在
print var++i
中,
++
操作符递增
var
(递增后,
var++
),而不是
i
(递增前,
++i
)。测试:
awk'BEGIN{j=2;print i++j;print i”,“j}'
Ah我明白了-这现在是有意义的!谢谢你的帮助。谢谢你的帮助——它很管用。我知道我的代码现在会覆盖每个文件的rename.fasta,这只是出于测试目的。不过我有一个问题,因为我在awk中找到了-v var=val选项,我尝试了以下方法:
awk-v var=“$name”/^>/{print var++I;next}{print}'$file>rename.fasta
,但除了一些隐藏的.nfs000文件之外,它没有产生任何输出,所以基本上我使用了与您的版本相同的方法,只是我没有使用“>”和“\u001”。你知道它为什么会这样吗?@chu esr显然在
print var++i
中,
++
操作符递增
var
(递增后,
var++
),而不是
i
(递增前,
++i
)。测试:
awk'BEGIN{j=2;print i++j;print i”,“j}'
Ah我明白了-这现在是有意义的!谢谢你的帮助。