【问题标题】:how to ignore action on printing a field value using awk如何忽略使用 awk 打印字段值的操作
【发布时间】:2022-01-18 14:18:14
【问题描述】:

您好,我有几个文件的起始行(或记录)遵循以下格式:

cat file_1.txt | grep '>'
> CP022114.1 Kluyvera georgiana strain YDC799 chromosome, complete genome

我想检索该记录中对应于属分类类别的第二个字段,在本例中为“Kluyvera”。所以我用这个:

awk 'NR==1{print $2}' file.txt 

我得到了

Kluyvera

问题在于,在某些文件中,第二个字段不对应于属分类类别,并且该属以字符串“candidatus”开头:

cat file_2.txt | grep '>'
> NTKC01000006.1 Candidatus Thioglobus sp. MED-G25 SUP05-clade-MED-G25-C6, whole genome shotgun sequence

在上面的记录中,“Thioglobus”是该物种的属。所以当我尝试上面的 awk 命令时,它会检索到“Candidatus”。

我希望 awk 打印“此文件具有候选资格”,而不是检索该记录的第二个字段。

【问题讨论】:

  • 如果您的行以> 开头,则两个示例的第二个字段应分别为CP022114.1NTKC01000006.1,而不是KluyveraCandidatus。您真的亲自尝试过awk 'NR==1{print $2}' 吗?
  • 可能 OP 每个输入文件都有一个序列,因此实际上NR==1 等效于/>/,其余行是实际序列。
  • @tripleee 当他们grep '>' 检索目标记录时,我怀疑> 是其中的一部分。在我编辑问题之前,它被降价渲染隐藏了,但它就在那里。
  • 是的,是的,这是 FASTA 格式的一部分。这是一种简单的文本格式,其中任何以> 开头的行都是开始新序列的标题。如果文件中有多个序列,grep '>' 将检索多个序列。
  • 好的,但是如果他们想要从这个标题中获得他们所谓的属分类类别并带有前导 > 字段,他们应该查看字段 3(或 4),而不是 2(或 3) ,不应该吗?

标签: awk fasta


【解决方案1】:

假设你有这样的输入文件:

cat file

CP022114.1 Kluyvera georgiana strain YDC799 chromosome, complete genome
NTKC01000006.1 Candidatus Thioglobus sp. MED-G25 SUP05-clade-MED-G25-C6, whole genome shotgun sequence

您可以像这样使用awk 进行条件打印:

awk '{print ($2 == "Candidatus" ? $3 : $2)}' file

Kluyvera
Thioglobus

或者,如果您想为 Candidatus 记录打印自定义字符串,请使用:

awk '{print ($2 == "Candidatus" ? "this file has candidatus" : $2)}' file

Kluyvera
this file has candidatus

【讨论】:

  • @Valentin:成功了吗?
猜你喜欢
  • 2015-11-04
  • 2014-05-13
  • 2013-03-13
  • 2017-09-14
  • 2017-06-02
  • 2012-02-27
  • 2016-02-15
  • 2021-08-07
  • 2011-01-30
相关资源
最近更新 更多