我有以下制表符分隔数据:
chr1 3119713 3119728 MA05911Bach1Mafk 839 +
chr1 3119716 3119731 MA05011MAFNFE2 860 +
chr1 3120036 3120051 MA01502Nfe2l2 866 +
我想要做的是从第4列删除7个字符。 导致
chr1 3119713 3119728 Bach1Mafk 839 +
chr1 3119716 3119731 MAFNFE2 860 +
chr1 3120036 3120051 Nfe2l2 866 +
我该怎么做? 请注意,输出也需要TAB分隔。
我坚持使用以下代码,这些代码从第一个代码中取代 列向前,我不想要
sed 's/^.\{7\}//' myfile.txt
答案 0 :(得分:5)
awk '{ $4 = substr($4, 8); print }'
答案 1 :(得分:4)
perl -anE'$F[3] =~ s/.{7}//; say join "\t", @F' data.txt
或
perl -anE'substr $F[3],0,7,""; say join "\t", @F' data.txt
答案 2 :(得分:0)
使用sed
$ sed -E 's/^(([^\t]+\t){3}).{7}/\1/' myfile.txt
chr1 3119713 3119728 Bach1Mafk 839 +
chr1 3119716 3119731 MAFNFE2 860 +
chr1 3120036 3120051 Nfe2l2 866 +
-E
使用扩展正则表达式,以避免对\
使用(){}
。某些sed
版本可能需要-r
而不是-E
^(([^\t]+\t){3})
捕获前三列,如果需要,可以轻松更改列数.{7}
个字符\1
捕获的列-i
选项
使用perl
,您可以将\K
用于可变长度正向后视
perl -pe 's/^([^\t]+\t){3}\K.{7}//' myfile.txt