2

我有一个包含许多行的文本文件,所有行都采用相同的格式。我想删除第一次出现“;”之间的所有文本 和第一个制表符或空格字符(它是制表符分隔的,但它可能只是空格)。

该文件如下所示:

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 个字符。但我不知道该怎么做。

4

3 回答 3

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
于 2013-11-08T14:00:55.873 回答
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
于 2013-11-08T16:17:23.453 回答
0

这可能对您有用(GNU sed):

sed 's/;\S\+//' file
于 2013-11-08T15:07:31.047 回答