根据三列中的 2 列的信息保留唯一行

Age*_*e87 8 awk uniq

假设你有一个这样的文件:

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 列作为键的“可见”关联数组。使用后增量运算符,以便在您第一次遇到该键时,该值为零。当您第一次看到密钥时,将否定运算符用于“真”结果。


Den*_*son 5

如果您不介意输出已排序:

sort -u -k1,2 file
Run Code Online (Sandbox Code Playgroud)
  • -u - 独特的
  • -k1,2 - 将字段 1 和 2 一起用作键