linux - quitar - ¿Cómo eliminar filas duplicadas basadas en un valor de columna?
eliminar lineas duplicadas linux (4)
usted no dio un resultado esperado, ¿esto funciona para usted?
awk ''!a[$1]++'' file
con sus datos, la salida es:
123456.451 entered-auto_attendant
139651.526 entered-auto_attendant
139382.537 entered-auto_attendant
y esta línea imprime solo una línea column1 única:
awk ''{a[$1]++;b[$1]=$0}END{for(x in a)if(a[x]==1)print b[x]}'' file
salida:
139382.537 entered-auto_attendant
Dada la siguiente tabla
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
Utilizando un script bash shell basado en Linux, me gustaría eliminar todas las filas en función del valor de la columna 1 (La que tiene el número largo). Teniendo en cuenta que este número es un número variable
Lo he intentado con
awk ''{a[$3]++}!(a[$3]-1)'' file
sort -u | uniq
Pero no obtengo el resultado, que sería algo como esto, hacer una comparación entre todos los valores de la primera columna, eliminar todos los duplicados y mostrarlo
123456.451 entered-auto_attendant
139651.526 entered-auto_attendant
139382.537 entered-auto_attendant
Usando 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
, por defecto, compara toda la línea. Como tus líneas no son idénticas, no se eliminan.
Puede usar la sort
para sort
convenientemente por el primer campo y también eliminar duplicados de la misma:
sort -t '' '' -k 1,1 -u file
-
-t '' ''
campos están separados por espacios -
-k 1,1
: solo mira el primer campo -
-u
: eliminar duplicados
Además, es posible que haya visto el truco awk ''!a[$0]++''
para desduplicar líneas. Puede hacer esta dedupe en la primera columna solo usando awk ''!a[$1]++''
.
prueba este comando
awk ''!x[$1]++ { print $1, $2 }'' file