删除选项卡文件中的模式

时间:2019-02-12 14:30:16

标签: awk sed

libFooInternal大家好 我有一个数据框,例如:

我有一个文件,例如:

enter code here

这个想法只是删除名字中所有名字的最后一个数字部分 但是scaffolds_names有3种类型:

scaffold_1_1    X   2   2
scaffold_24_0   X   9   2
scaffold_15 X   2   2
IDBA_scaffold_30_1  X   2   317
scf7180005161000_2  X   1   2

并且想法是删除所有数字_1,这是我在此示例中应该得到的结果:

scaffold_number0_number1
scaffold_number0
IDBA_scaffold_number0_number1
scfXXX_number1

您有解决的办法吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

第一个解决方案: :请问您能尝试以下操作吗(以防万一有人只是想替换最后的_和后面的数字,那么仅跟随可能会有所帮助。 / p>

awk '{sub(/_[0-9]+$/,"",$1)} 1'  Input_file

第二个解决方案:

如果要检查从字符串_开始的第一个字段中是否应该有2个以上的sacffold值,然后尝试执行以下操作。

awk '(/scaffold/ && num=split($1,a,"_")>2) || /scf/{sub(/_[0-9]+$/,"",$1)} 1' Input_file

输出如下。

scaffold_1 X 2 2
scaffold_24 X 9 2
scaffold_15 X   2   2
IDBA_scaffold_30 X 2 317
scf7180005161000 X 1 2

答案 1 :(得分:1)

您可以尝试Perl,

perl -pe ' s/(^\S+)_\d\b/$1/g ' 

使用您的输入

$ cat bean.txt
scaffold_1_1    X   2   2
scaffold_24_0   X   9   2
scaffold_15 X   2   2
IDBA_scaffold_30_1  X   2   317
scf7180005161000_2  X   1   2
$ perl -pe ' s/(^\S+)_\d\b/$1/g ' bean.txt
scaffold_1    X   2   2
scaffold_24   X   9   2
scaffold_15 X   2   2
IDBA_scaffold_30  X   2   317
scf7180005161000  X   1   2
$

感谢@anubhava抓住了其中一种极端情况并帮助解决了该问题。

$ cat bean2.txt
scaffold_1_1    X   2   2
scaffold_24_0   X   9   2
scaffold_15 X   2   2
IDBA_scaffold_30_1  X   2   317
scaffold_1_15     X   2   2  # => this was not fixed in first answer
$ perl -pe 's/^(?!scaffold_\d+\b)(\S+)_\d+\b/$1/g' bean2.txt
scaffold_1    X   2   2
scaffold_24   X   9   2
scaffold_15 X   2   2
IDBA_scaffold_30  X   2   317
scaffold_1     X   2   2
$

答案 2 :(得分:1)

这是另一个awk变体:

awk 'BEGIN{FS=OFS="\t"} $1 ~ /^scf[0-9]+_[0-9]+$/ || split($1, a, "_") > 2 {
sub(/_[0-9]+$/, "", $1) } 1' file

scaffold_1  X   2   2
scaffold_24 X   9   2
scaffold_15 X   2   2
IDBA_scaffold_30    X   2   317
scf7180005161000    X   1   2

答案 3 :(得分:0)

使用任何支持-E的sed进行ERE,例如GNU或OSX / BSD sed:

$ sed -E 's/((_|scf)[0-9]+)_[0-9]+/\1/' file
scaffold_1    X   2   2
scaffold_24   X   9   2
scaffold_15 X   2   2
IDBA_scaffold_30  X   2   317
scf7180005161000  X   1   2