如何删除基于列值的重复行?

给出下表

123456.451 entered-auto_attendant 123456.451 duration:76 real:76 139651.526 entered-auto_attendant 139651.526 duration:62 real:62` 139382.537 entered-auto_attendant 

使用基于Linux的bash shell脚本,我想删除基于列1(长数字的那个)值的所有行。 考虑到这个数字是一个可变数字

我试过了

awk '{a[$3]++}!(a[$3]-1)' file

 sort -u | uniq 

但我没有得到这样的结果,比较第一列的所有值,删除所有重复项,并显示它

  123456.451 entered-auto_attendant 139651.526 entered-auto_attendant 139382.537 entered-auto_attendant 

Solutions Collecting From Web of "如何删除基于列值的重复行?"

你没有给出预期的输出,这是否适合你?

  awk '!a[$1]++' file 

与您的数据,输出是:

 123456.451 entered-auto_attendant 139651.526 entered-auto_attendant 139382.537 entered-auto_attendant 

而这一行只打印唯一的column1行:

  awk '{a[$1]++;b[$1]=$0}END{for(x in a)if(a[x]==1)print b[x]}' file 

输出:

 139382.537 entered-auto_attendant 

uniq默认情况下比较整个行。 由于你的线不相同,他们不会被删除。

您可以使用sort方便地排序第一个字段,也删除它的重复:

 sort -t ' ' -k 1,1 -u file 
  • -t ' '字段由空格分隔
  • -k 1,1 :只看第一个字段
  • -u :删除重复项

此外,您可能已经看到awk '!a[$0]++'技巧用于重复删除行。 您只能使用awk '!a[$1]++'在第一列进行重复数据删除。

使用awk:

 awk '!($1 in a){a[$1]++; next} $1 in a' file 123456.451 duration:76 real:76 139651.526 duration:62 real:62 

试试这个命令

 awk '!x[$1]++ { print $1, $2 }' file