【问题标题】:Am I using the proper command?我使用正确的命令吗?
【发布时间】:2020-10-04 19:31:41
【问题描述】:

我正在尝试在终端上编写一个单行命令来计算一个非常大的文件中所有唯一的 "gene-MIR""gene-MIR" 后面是一系列数字 ex。 gene-MIR334223gene-MIR633235gene-MIR53453 ... etc,还有多个相同的 "gene-MIR" 例如。 gene-MIR342433 可能会在脚本中出现 10x

我的问题是,如何编写一个命令来注释我的文件中存在的唯一“gene-MIR”?

目前我使用的命令是:

  1. grep -c "gene-MIR" myfile.txt | uniq

  2. grep "gene-MIR" myfile.txt | sort -u

第一个命令为我提供了一个计数;但是,我认为它不包括 "MIR" 之后的数字系列,而只是计算存在多少 "gene-MIR" 本身。

谢谢!

[1]: https://i.stack.imgur.com/Y7EcD.png

【问题讨论】:

  • 请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。
  • grep -c 计算与模式匹配的行数,因此如果一行包含该模式两次,则计数仅增加一。 grep 不带选项打印与模式匹配的整行,因此根据输入,sort 将看到不相关的上下文。如前所述,您必须展示有代表性的样本输入。
  • 您好!很抱歉造成误解,我在原帖中附上了一张照片,基本上,在图像中你可以看到红色突出显示的区域,我正在尝试为该区域“gene-MIR”编码,我希望它包含以下数字“米尔”前。 “gene-MIR8061”并且有多个相同的,我希望我的命令计算一次。 @BenjaminW。
  • 示例显示不同的“gene-MIR8061”后跟-3、-4、-5之一;那些被认为是唯一的并且要单独计算?或者可能忽略每个 -3/-4/-5 并将它们全部一起计算?
  • 我想忽略 -3/-4/-5 等,只计算“MIR”示例“gene-MIR8061”后面的数字。 @Milag

标签: linux grep uniq


【解决方案1】:

假设所有条目都在不同的行上,试试这个:

grep "gene-MIR" myfile.txt | sort | uniq -c

如果条目与其他文本混合在一起,并且系统有 GNU grep 试试这个:

grep -o 'gene-MIR[0-9]*' myfile.txt | sort | uniq -c

获取总数:

grep -o 'gene-MIR[0-9]*' myfile.txt  | wc -l

【讨论】:

  • 非常感谢!我觉得这就是;但是,当我输入命令时,我无法计算它?它只是整理出来,但没有给我计数。 @agc
  • 你认为我需要在命令中添加一个正则表达式,以便它还可以合并“MIR”后面的数字吗? @agc
  • 天哪,非常感谢!所以我刚刚提取的命令提取了所有唯一的“基因-MIR”,后跟一系列数字,有没有办法让我可以让命令告诉我到底有多少,或者我必须手动计算? @agc
  • 总共有近4000多个gene-MIR;但是,这些并不是唯一的,因为它们被多次注释,有没有一种方法可以让我得到命令来准确地告诉我有多少独特的“基因-MIR####”? @agc。
  • 很抱歉一直困扰@agc。如何更改命令,使其显示所有“gene-MIR”,后跟一个单词和/或数字。所以基本上任何字母数字值?前任。 “基因-MIR4243FG”。谢谢!
【解决方案2】:

如果你有这样的信息:

Inf1
Inf2
Inf1
Inf2

而您想知道“inf”种类的数量,您总是需要先对其进行排序。只有之后你才能开始数数。

编辑

我创建了一个类似的文件,其中包含请求者评论中提到的示例,如下所示:

Nonsense
gene-MIR4232
gene-MIR2334
gene-MIR93284
gene-MIR4232
gene-MIR2334
gene-MIR93284
More nonsense

对此,我已经应用了这两个命令,如问题中所述:

grep -c "gene-MIR" myfile.txt | uniq

结果为 6,就像下面的命令:

grep -c "gene-MIR" myfile.txt

为什么?这里的问题是“有多少行包含字符串“gene-MIR”?”。
这显然不是所要求的信息。

另一个命令也不正确:

grep "gene-MIR" myfile.txt | sort -u

结果:

gene-MIR2334
gene-MIR4232
gene-MIR93284

说明:
grep "gene-MIR" ... 表示:显示所有包含“gene-MIR”的行
| sort -u 表示:对显示的行进行排序,如果有多个相同的实例,则只显示一个其中。

这也不是请求者想要的。因此我有以下建议:

grep "gene-MIR" myfile.txt | sort | uniq -c

结果如下:

      2 gene-MIR2334
      2 gene-MIR4232
      2 gene-MIR93284

我想这更多的是请求者正在寻找的。​​p>

这是什么意思? grep "gene-MIR" myfile.txt :只显示包含“gene-MIR”的行
| sort :对显示的行进行排序。像这样,你得到一个像这样的中间结果:

    gene-MIR2334
    gene-MIR2334
    gene-MIR4232
    gene-MIR4232
    gene-MIR93284
    gene-MIR93284

| uniq -c :将这些结果组合在一起并显示每个实例的计数。

不幸的是,该示例选择不当,因为每个实例恰好出现两次。因此,为了清楚起见,我创建了另一个“myfile.txt”,如下所示:

Nonsense
gene-MIR4232
gene-MIR2334
gene-MIR93284
gene-MIR2334
gene-MIR2334
gene-MIR93284
More nonsense

我再次应用了相同的命令:

grep "gene-MIR" myfile.txt | sort | uniq -c

结果如下:

      3 gene-MIR2334
      1 gene-MIR4232
      2 gene-MIR93284

在这里您可以更清楚地看到建议的命令是正确的。

...您的下一个问题是:“是的,但是可以对结果进行排序吗?”,我回答:

grep "gene-MIR" myfile.txt | sort | uniq -c | sort -n

结果如下:

      1 gene-MIR4232
      2 gene-MIR93284
      3 gene-MIR2334

玩得开心!

【讨论】:

  • 我的文件中有一个大型数据集,其中包含数千个基因组和其他我不需要的信息。从数据集中,我需要能够提取独特的 miRNA 基因 ex。基因-MIR4232,基因-MIR2334,基因-MIR93284 ...等并获得准确的计数。 @多米尼克
  • @testtubeshawty12:我已经根据您的评论编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2022-11-14
  • 2015-05-16
  • 2019-01-29
  • 2015-04-14
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 2021-05-05
相关资源
最近更新 更多