Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何基于列值删除重复的行?_Linux_Bash_Awk_Delete Row - Fatal编程技术网

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开头的所有列(在本例中),该怎么办