【问题标题】:Insert text if column contains a number如果列包含数字,则插入文本
【发布时间】:2018-10-05 19:52:57
【问题描述】:

我有一个如下所示的制表符分隔文件

10      7.98862e-05
10      cellular organisms; Bacteria; Proteobacteria; Betaproteobacteria; Burkholderiales; Burkholderiaceae; Ralstonia; Ralstonia solanacearum  0.000159772
10      0.000207704
10      cellular organisms; Bacteria; Terrabacteria group; Firmicutes; Clostridia; Clostridiales; Clostridiaceae; Clostridium; Clostridium sp. C105KSO15        0.00092668
10      9.58635e-05
10      0.000191727
10      0.000127818
10      cellular organisms; Bacteria; Terrabacteria group; Firmicutes; Clostridia; Clostridiales; Peptostreptococcaceae; Clostridioides; Clostridioides difficile       0.0                                                               0142198
10      cellular organisms; Bacteria; Terrabacteria group; Firmicutes; Clostridia; Clostridiales; Clostridiaceae; Clostridium; Clostridium sp. C105KSO15        0.00268418

它应该是三列,但有些行缺少第二列(细菌分类)。对于这些行,我想将数字移动到第三列并插入一些文本(例如Unclassified)。

我一直在尝试修改我在网上找到的一些命令,以便在第二列中以数字开头但无法正常工作的任何值之前插入Unclassified\t

任何帮助将不胜感激。

【问题讨论】:

  • Stack Overflow 不是代码编写服务。请出示您的代码。由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: linux unix awk sed replace


【解决方案1】:

试试这条线:

awk -F'\t' -v OFS="\t" 'NF==2{$3=$2;$2="Unclassified"}7' file

【讨论】:

  • 我想我都关注了,但7 是做什么的?
  • @cazzlewazzle89 非零数字执行默认操作:print
【解决方案2】:

你也可以试试这个 sed

sed -E 's/([^\t]*\t)([0-9]\.[0-9].*$)/\1Unclassified\t\2/' infile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多