假设你有一个这样的文件:
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
不起作用。
gle*_*man 15
有一个“著名”的 awk 习语就是针对这一点的。你想做:
awk '!seen[$1,$2]++' file
Run Code Online (Sandbox Code Playgroud)
这将创建一个以 2 列作为键的“可见”关联数组。使用后增量运算符,以便在您第一次遇到该键时,该值为零。当您第一次看到密钥时,将否定运算符用于“真”结果。
如果您不介意输出已排序:
sort -u -k1,2 file
Run Code Online (Sandbox Code Playgroud)
-u
- 独特的-k1,2
- 将字段 1 和 2 一起用作键