我有一个包含许多行的文本文件,所有行都采用相同的格式。我想删除第一次出现的“;”之间的所有文本和第一个制表符或空格字符(它的制表符分隔,但它可能只是空格)。
该文件如下所示:
Q5F5R2 Bacteria
Q5F9Q8 Bacteria
Q5F850 Bacteria
Q5F851 Bacteria
Q5F7X1;Q5F832;Q5822 Bacteria
Q5F848 Bacteria
Q5F847 Bacteria
Q5FAF5 Bacteria
Q5F881;Q9RF92 Bacteria
Q5F5F3 Bacteria
我想保留第一个入藏号,使其看起来像这样:
Q5F5R2 Bacteria
Q5F9Q8 Bacteria
Q5F850 Bacteria
Q5F851 Bacteria
Q5F7X1 Bacteria
Q5F848 Bacteria
Q5F847 Bacteria
Q5FAF5 Bacteria
Q5F881 Bacteria
Q5F5F3 Bacteria
我到处寻找解决方案,但没有任何效果,主要是sed,例如:sed's /\; .* //'但它没有做任何事情。
帮助!
其他评论:
我想你也可以将第一列截断为前6个字符。但我不知道该怎么做。
答案 0 :(得分:1)
试试这个:
sed 's/;[^\t]*//' file
添加测试:
kent$ cat f
Q5F5R2 Bacteria
Q5F9Q8 Bacteria
Q5F850 Bacteria
Q5F851 Bacteria
Q5F7X1;Q5F832;Q5822 Bacteria
Q5F848 Bacteria
Q5F847 Bacteria
Q5FAF5 Bacteria
Q5F881;Q9RF92 Bacteria
Q5F5F3 Bacteria
kent$ sed 's/;[^\t]*//' f
Q5F5R2 Bacteria
Q5F9Q8 Bacteria
Q5F850 Bacteria
Q5F851 Bacteria
Q5F7X1 Bacteria
Q5F848 Bacteria
Q5F847 Bacteria
Q5FAF5 Bacteria
Q5F881 Bacteria
Q5F5F3 Bacteria
答案 1 :(得分:1)
awk
解决方案:
awk '{sub(/;[^\t]*\t/,"\t")}1' file
Q5F5R2 Bacteria
Q5F9Q8 Bacteria
Q5F850 Bacteria
Q5F851 Bacteria
Q5F7X1 Bacteria
Q5F848 Bacteria
Q5F847 Bacteria
Q5FAF5 Bacteria
Q5F881 Bacteria
Q5F5F3 Bacteria
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed 's/;\S\+//' file