Linux 如何基于列值删除重复的行?
给出下表Linux 如何基于列值删除重复的行?,linux,bash,awk,delete-row,Linux,Bash,Awk,Delete Row,给出下表 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的bashshell脚本,我想根据第1列的值删除所有行(带有长数字的行)。考虑到该数字是一个可变数字 我试过了 awk'{a[$
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的bashshell脚本,我想根据第1列的值删除所有行(带有长数字的行)。考虑到该数字是一个可变数字
我试过了
awk'{a[$3]++}!(a[$3]-1)“文件
sort -u | uniq
但是我没有得到这样的结果,在第一列的所有值之间进行比较,删除所有重复项并显示它
123456.451 entered-auto_attendant
139651.526 entered-auto_attendant
139382.537 entered-auto_attendant
使用awk:
awk '!($1 in a){a[$1]++; next} $1 in a' file
123456.451 duration:76 real:76
139651.526 duration:62 real:62
默认情况下,uniq会比较整行。由于您的行不同,因此不会删除它们 您可以使用
sort
按第一个字段方便地排序,也可以删除重复的字段:
sort -t ' ' -k 1,1 -u file
字段用空格分隔-t'
:只查看第一个字段-k 1,1
:删除重复项-u
此外,您可能已经看到了
awk'!用于消除重复行的[$0]+'
技巧。您只能使用awk'在第一列进行重复数据消除!一个[$1]+'
您没有给出预期的输出,这对您有用吗
awk '!a[$1]++' file
根据您的数据,输出为:
123456.451 entered-auto_attendant
139651.526 entered-auto_attendant
139382.537 entered-auto_attendant
这一行只打印唯一的第1列:
awk '{a[$1]++;b[$1]=$0}END{for(x in a)if(a[x]==1)print b[x]}' file
输出:
139382.537 entered-auto_attendant
试试这个命令
awk '!x[$1]++ { print $1, $2 }' file
很好,但我希望所有记录都以同一列开始,就像在描述中一样,在这种情况下,有两条记录具有相同的第一列,但有时可能是三条或更多,这不是这个答案已经在做的吗。它正在打印所有重复的行。您期望的输出是什么?+1:轻微的输入错误-
b[$1]
应该是END
块中的b[x]
。如果我需要以139382.537开头的所有列(在本例中),该怎么办