我有一个文件,其中有两列,以制表符分隔,如下所示:
OG0000000 PF03169,PF03169,PF03169,MAC1_004431-T1,
OG0000002 PF07690,PF00083,PF00083,PF07690,PF00083,
OG0000003 MAC1_000127-T1,
OG0000004 PF13246,PF00689,PF00690,
OG0000005 PF00012,PF01061,PF12697,PF00012,
我只想删除第二列中的重复字符串,同时不改变第一列中的任何内容,这样我的最终输出看起来像这样:
OG0000000 PF03169,MAC1_004431-T1,
OG0000002 PF07690,PF00083,
OG0000003 MAC1_000127-T1,
OG0000004 PF13246,PF00689,PF00690,
OG0000005 PF00012,PF01061,PF12697,
我试着用awk开始处理这个。
awk 'BEGIN{RS=ORS=","} !seen[$0]++' file.txt
但我的输出看起来像这样,在重复的字符串首次出现时仍然存在一些重复。
OG0000000 PF03169,PF03169,MAC1_004431-T1,
OG0000002 PF07690,PF00083,PF07690,
OG0000003 MAC1_000127-T1,
OG0000004 PF13246,PF00689,PF00690,
OG0000005 PF00012,PF01061,PF12697,PF00012,
我意识到问题是因为awk获取的第一行是直到第一个逗号之前的所有内容,但我对awk命令还不熟悉,无法想出如何在不弄乱第一列的情况下解决此问题。先提前感谢!
$0
表示整行。因此,您可以在变量seen
中记录唯一的整行,同时只关注第二列的部分。 - user1934428OG1 A,B,C,B
,第2行有OG2 B,D
。因为_B_已经出现在第1行中,所以第2行中的_B_也应该被删除吗? - user1934428