给出下表
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
答案 0 :(得分:6)
你没有给出预期的输出,这对你有用吗?
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
答案 1 :(得分:3)
uniq
会比较整行。由于您的线条不相同,因此不会删除它们。
您可以使用sort
方便地按第一个字段排序,也可以删除它的副本:
sort -t ' ' -k 1,1 -u file
-t ' '
字段以空格分隔-k 1,1
:只看第一个字段-u
:删除重复项此外,您可能已经看到了用于重复删除行的awk '!a[$0]++'
技巧。您只能使用awk '!a[$1]++'
在第一列上制作此重复数据删除。
答案 2 :(得分: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
答案 3 :(得分:1)
尝试此命令
awk '!x[$1]++ { print $1, $2 }' file