【问题标题】:Insert part of the file name in headers of the file在文件头中插入部分文件名
【发布时间】:2018-09-07 01:51:50
【问题描述】:

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

文件标题是

GeneName_something.fas。

我的文件格式如下:

'>物种
atgaatatagatata
'>物种b
atagtagctatgat

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

'>物种基因名称
atgaatatagatata
'>物种b-基因名称
atagtagctatgat

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

【问题讨论】:

标签: bash awk sed gawk file-rename


【解决方案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

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

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

【讨论】:

  • 您好,谢谢。我试过了,但它不工作。你能解释一下 /^\47/ 部分吗? 47是什么?也许可以解释为什么这不起作用。事实上,我的线路是这样开始的 >Speciesa。没有'(不知道如何在stackoverflow上正确显示。
  • \47 是单引号 ' 在您的问题行中以它开头。如果他们以其他东西开头(可能是>),请将\47 替换为>
  • 是的,对不起,我的错。在工作,在忙。至少现在我知道 \47 = '
  • 如果您坚持使用 awk,您将需要该信息。
【解决方案2】:

关注awks 也可以帮助您。

解决方案一:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2011-06-05
    • 2011-03-30
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多