删除选项卡文件中的特定模式

时间:2019-02-11 17:30:31

标签: bash

我有一个文件,例如:

scaffold_10_1   YP_02917613.1   0.722   397 90  1   55021   53805   70  446 1.803E-180  566
scaffold_282_0  YP_004091438.1  0.799   317 102 1   55023   53395   66  442 2.282E-173  546
scaffold_15     YP_009676312.1  0.021   327 14  1   55320   52895
IDBA_scaffold_66230_1   YP_004091438.1         0.789    317 122 1   55023   53395   66  442 2.282E-173  506
scf7180005161552_2      YP_004091438.1          0.789   317 122 1   55023   53395   66  442 2.282E-173  506

这个想法只是删除第一列中所有名称的最后一个数字部分并得到:

scaffold_10 YP_02917613.1   0.722   397 90  1   55021   53805   70  446 1.803E-180  566
scaffold_282    YP_004091438.1  0.799   317 102 1   55023   53395   66  442 2.282E-173  546
scaffold_15     YP_009676312.1  0.021   327 14  1   55320   52895
IDBA_scaffold_66230    YP_004091438.1         0.789 317 122 1   55023   53395   66  442 2.282E-173  506
scf7180005161552     YP_004091438.1            0.789    317 122 1   55023   53395   66  442 2.282E-173  506

如您所见,有时第一个_number之后没有_number_

scaffold_15

您有解决的办法吗?

感谢您的帮助。

对于布鲁诺里: 这是我得到的桌子:

scaffold_10   YP_02917613.1   0.722   397 90  1   55021   53805   70  446 1.803E-180  566
scaffold_282  YP_004091438.1  0.799   317 102 1   55023   53395   66  442 2.282E-173  546
scaffold     YP_009676312.1  0.021   327 14  1   55320   52895
IDBAscaffold_66230_1   YP_004091438.1         0.789    317 122 1   55023   53395   66  442 2.282E-173  506
scf7180005161552      YP_004091438.1          0.789   317 122 1   55023   53395   66  442 2.282E-173  506

如您所见,scaffold_15中的15已被删除,但我想保留它。

2 个答案:

答案 0 :(得分:2)

尝试

cat file.csv | sed -e 's/\([A-Ba-b0-9_]*\)\(_[0-9]*\)\(.*\)/\1\3/' > file-without-number.csv

这是如何工作的?

  • sed是嵌入式编辑器
  • 使用命令s/运行sed将进行搜索和替换。语法以斜杠分隔:s/search_patter/replace_pattern
  • 搜索模式为\([A-Ba-b0-9_]*\)\(_[0-9]*\)\(.*\)。它将把线分成三部分:
    • 1)\([A-Ba-b0-9_]*\)由字母,数字或_
    • 组成的任何字符串
    • 2)...后跟_number(与\(_[0-9]*\)匹配)
    • 3)该行的其余部分(匹配\(.*\)
  • \1\3将仅用部分1和3替换字符串,从而删除2

答案 1 :(得分:1)

您可以尝试使用此sed:

a

使用IDBA_scaffold_66230_1之类的数据,您可以尝试以下操作:

x