在文件的标题中插入文件名的一部分

时间:2018-03-28 11:35:36

标签: bash awk sed gawk file-rename

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

文件标题是

  

GeneName_something.fas。

我的文件有这种格式:

  

'> Speciesa
  atgaatatagatata
  “> Speciesb
  atagtagctatgat

我想在Species名称后插入Gene名称。输出将是:

  

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

我想使用bash和awk或sed并在我的文件夹中将其作为循环运行。 感谢

2 个答案:

答案 0 :(得分:1)

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

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

此版本将更改的数据输出到stdout,但您可以使用awk -i inplace对文件进行现场编辑(请参阅here)。

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

答案 1 :(得分:1)

关注awk也可以帮助你。

解决方案1:

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

解决方案第二:

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