查找受列限制的唯一元素

查找受列限制的唯一元素

unix 命令uniq -u返回真正唯一的元素(与 的默认行为相反uniq)。例如:

echo -e "a\na\nb\nc\nc\nd\ne\ne\ne\nf" | uniq -u
  b
  d
  f

如何以列限制的方式模拟此命令(即从表中查找具有唯一元素的列)。我们可以假设输入已经排序。例如,将第 1 列作为所需的唯一列应给出以下输出:

echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | some-command -col 1
  b      1
  d      1
  f      1

将第 2 列作为所需的唯一列将给出以下输出:

echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | some-command -col 2
  e      3

答案1

awk 'NR==1 { lastcol1=$1; lastline=$0; next; }
  { if ($1==lastcol1) { repeated=1; next; }
    if (repeated==0) print lastline; lastcol1=$1; lastline=$0; repeated=0; }
  END { if (repeated==0) print lastline; }' input
b       1
d       1
f       1

答案2

使用 awk 的一种方法 --

 echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | awk '{a[$1] = $0; count[$1]++} END{for (i in a) {if (count[i]== 1) print a[i]}  }'
b   1
d   1
f   1

对于第二列,唯一值为 3 - 您已显示

 f  3

作为所需的输出 - 应该是“e 3”吗?

echo -e "a\t1\na\t2\nb\t1\nc\t1\nc\t2\nd\t1\ne\t1\ne\t2\ne\t3\nf\t1" | awk '{a[$2] = $0; count[$2]++} END{for (i in a) {if (count[i]== 1) print a[i]}  }'
e   3

相关内容