repetidas quitar lineas eliminar duplicados duplicadas contar con linux bash awk delete-row

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