Tengo este código en un script de shell:
sort input | uniq -c | sort -nr > output
El archivo de entrada no tenía espacios en blanco anteriores, pero la salida sí. ¿Cómo puedo solucionar esto? Esto es en bash
command-line
uniq
Jeremy Wik
fuente
fuente
perl -pe 's/ *(\d+) /$1\t/'
( aquí algunas alternativas ). También canalice al portapapeles conxclip -selection c
para pegar directamente en una hoja de cálculo.uniq -c
agrega espacios en blanco principales. P.ejPuede agregar un comando al final de la tubería para eliminarlo. P.ej
fuente
FWIW puede usar una herramienta de clasificación diferente para mayor flexibilidad. Python es una de esas herramientas.
Fuente
En teoría, esto sería incluso más rápido que la
sort
herramienta para entradas grandes, ya que el programa anterior usa una tabla hash para identificar líneas duplicadas en lugar de una lista ordenada. (Por desgracia, coloca líneas de recuento idéntico en un orden arbitrario en lugar de un orden natural; esto puede modificarse y aún así ser más rápido que dossort
invocaciones).Formato de salida
Si desea más flexibilidad en el formato de salida se puede mirar en el
print()
yformat()
funciones integradas.Por ejemplo, si desea imprimir el número de recuento en octal con hasta 7 ceros a la izquierda y seguido de una pestaña en lugar de un carácter de espacio con un terminador de línea NUL, reemplace la última línea con:
Uso
Almacene el script en un archivo, por ejemplo
sort_count.py
, e invoque con Python:fuente
Traduce los espacios en blanco iniciales en un espacio en blanco con tr -s y luego imprime la salida del segundo carácter con cut -c.
fuente