在文件的headers中插入部分文件名

Insert part of the file name in headers of the file

我想在我的文件中插入文件标题的一部分。

文件标题是

GeneName_something.fas.

我的文件格式如下:

'>Speciesa
atgaatatagatata
'>Speciesb
atagtagctatgat

我想在物种名称后插入基因名称。输出将是:

'>Speciesa-GeneName
atgaatatagatata
'>Speciesb-GeneName
atagtagctatgat

我想将 bash 与 awk 或 sed 一起使用,并将 运行 作为我文件夹中的循环。 谢谢

使用 GNU awk(BEGINFILE 可以替换为 FNR==1 但我使用的是 -i inplace):

$ awk '
  BEGINFILE { split(FILENAME,f,"_") }  # split filename on _
  /^/ { [=10=]=[=10=]"-"f[1] }              # add to quote-starting records
  1' GeneName_something.fas            # output
'>Speciesa-GeneName
atgaatatagatata
'>Speciesb-GeneName
atagtagctatgat

此版本将更改的数据输出到标准输出,但您可以使用 awk -i inplace 就地编辑文件(请参阅 here)。

注意,没有检查 GeneName 实际存在的文件名。如果不存在,无论如何都会添加一个-

以下 awk 也可以帮助您。

解法一:

awk 'FNR==1{val=FILENAME;sub(/_.*/,"",val)} />Species/{[=10=]=[=10=]"-"val;} 1' GeneName_something.fas

方案二:

awk 'FNR==1{val=FILENAME;sub(/_.*/,"",val)} />Species/{print [=11=]"-"val;next} 1' GeneName_something.fas