我有一个文件,其中一列的名称每列重复多次。我想将每个重复压缩为一个,同时保留与其他同名重复不相邻的任何其他同名重复。
例如,我想将左侧转到右侧:
Golgb1 Golgb1
Golgb1 Akna
Golgb1 Spata20
Golgb1 Golgb1
Golgb1 Akna
Akna
Akna
Akna
Spata20
Spata20
Spata20
Golgb1
Golgb1
Golgb1
Akna
Akna
Akna
Run Code Online (Sandbox Code Playgroud)
这是我一直在使用的:perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt
但是,这种方法只保留了左边的一个代表(即不重复 Golb1 和 Akna)。
有没有办法为每个块保留唯一名称,同时保留在多个非相邻块中重复的名称?
假设你有一个这样的文件:
NW_006521251.1 428 84134
NW_006521251.1 511 84135
NW_006521038.1 202 84155
NW_006521038.1 1743 84153
NW_006521038.1 1743 84154
NW_006520495.1 198 84159
NW_006520086.1 473 84178
NW_006520086.1 511 84180
Run Code Online (Sandbox Code Playgroud)
我想保留基于第 1 列和第 2 列的唯一行(即不仅仅是第二列,因为这个数字可能会在第一列的不同标签下重复)。
这样我就把它作为输出(NW_006521038.1 1743从列表中删除了第二个重复):
NW_006521251.1 428 84134
NW_006521251.1 511 84135
NW_006521038.1 202 84155
NW_006521038.1 1743 84153
NW_006520495.1 198 84159
NW_006520086.1 473 84178
NW_006520086.1 511 84180
Run Code Online (Sandbox Code Playgroud)
有没有办法用 awk 做到这一点?使用uniq file不起作用。
我希望第 2 列包含字符串 Piebald,其他字符串的顺序无关紧要。我有:
HR0024 Black pastel Piebald
HR0028 Piebald
MC0023 Piebald
MC0039 Fire Piebald
MC0075 Piebald VPI Axanthic
MC0082 Pastel Piebald
MC0120 Piebald Yellowbelly Het-Lavender
MC0124 Super-Pastel Piebald Het-Clown
MC0126 Fire Pastel Piebald
MC0144 Piebald Vanilla
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
HR0024 Piebald pastel Black
HR0028 Piebald
MC0023 Piebald
MC0039 Piebald Fire
MC0075 Piebald VPI Axanthic
MC0082 Piebald Pastel
MC0120 Piebald Yellowbelly Het-Lavender
MC0124 Piebald Super-Pastel Het-Clown
MC0126 Piebald Pastel Fire
MC0144 Piebald Vanilla
Run Code Online (Sandbox Code Playgroud)
某些行将在不同的列(2、3 或 4)上具有目标字符串。我不认为cut -f这里的工作,我认为awk或sed …