bash - sublime - eliminar lineas duplicadas txt
Elimine lĂneas parcialmente duplicadas por columna y conserve el Ășltimo (4)
Tengo un archivo que se ve así:
2011-03-21 name001 line1
2011-03-21 name002 line2
2011-03-21 name003 line3
2011-03-22 name002 line4
2011-03-22 name001 line5
para cada nombre, solo quiero su última aparición. Entonces, espero que el resultado sea:
2011-03-21 name003 line3
2011-03-22 name002 line4
2011-03-22 name001 line5
¿Podría alguien darme una solución con bash / awk / sed?
EDITAR: Aquí hay una versión que realmente responde la pregunta.
sort -k 2 filename | while read f1 f2 f3; do if [ ! "$f2" = "$lf2" ]; then echo "$f1 $f2 $f3"; lf2="$f2"; fi; done
Este código obtiene líneas uniq por segundo campo, pero desde el final del archivo o texto (como en el ejemplo de resultado)
tac temp.txt | sort -k2,2 -r -u
awk ''{a[$2]=$0} END {for (i in a) print a[i]}'' file
Si el orden de aparición es importante:
Basado en la primera aparición:
awk ''!a[$2] {b[++i]=$2} {a[$2]=$0} END {for (i in b) print a[b[i]]}'' file
Basado en la última aparición:
tac file | awk ''!a[$2] {b[++i]=$2} {a[$2]=$0} END {for (i in b) print a[b[i]]}''
sort < bar > foo
uniq < foo > bar
bar ahora no tiene líneas duplicadas