use*_*949 7 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
Run Code Online (Sandbox Code Playgroud)
使用基于Linux的bash shell脚本,我想根据第1列的值(具有长号的那个)删除所有行.考虑到这个数字是一个可变数字
我试过了
awk '{a[$3]++}!(a[$3]-1)' file
sort -u | uniq
Run Code Online (Sandbox Code Playgroud)
但是我没有得到类似这样的结果,在第一列的所有值之间进行比较,删除所有重复项并显示它
123456.451 entered-auto_attendant
139651.526 entered-auto_attendant
139382.537 entered-auto_attendant
Run Code Online (Sandbox Code Playgroud)
uniq默认情况下,比较整行。由于您的线条不相同,因此它们不会被删除。
您可以使用方便sort地按第一个字段进行排序,也可以删除它的重复项:
sort -t ' ' -k 1,1 -u file
Run Code Online (Sandbox Code Playgroud)
-t ' '字段之间用空格分隔-k 1,1: 只看第一个字段-u: 删除重复项此外,您可能已经看到了awk '!a[$0]++'删除重复行的技巧。您可以仅使用在第一列上进行重复数据删除awk '!a[$1]++'。
你没有给出预期的输出,这对你有用吗?
awk '!a[$1]++' file
Run Code Online (Sandbox Code Playgroud)
使用您的数据,输出是:
123456.451 entered-auto_attendant
139651.526 entered-auto_attendant
139382.537 entered-auto_attendant
Run Code Online (Sandbox Code Playgroud)
并且此行仅打印唯一的column1行:
awk '{a[$1]++;b[$1]=$0}END{for(x in a)if(a[x]==1)print b[x]}' file
Run Code Online (Sandbox Code Playgroud)
输出:
139382.537 entered-auto_attendant
Run Code Online (Sandbox Code Playgroud)