J'ai ce code dans un script shell:
sort input | uniq -c | sort -nr > output
Le fichier d'entrée n'avait pas d'espaces blancs précédents, mais la sortie en a. Comment puis-je réparer ça? C'est en bash
command-line
uniq
Jeremy Wik
la source
la source
perl -pe 's/ *(\d+) /$1\t/'
( ici quelques alternatives ). Pipes également au presse-papiers avecxclip -selection c
pour coller directement dans une feuille de calcul.uniq -c
ajoute un espace blanc de premier plan. Par exempleVous pouvez ajouter une commande à la fin du pipeline pour la supprimer. Par exemple
la source
FWIW vous pouvez utiliser un outil de tri différent pour plus de flexibilité. Python est l'un de ces outils.
La source
En théorie, cela serait même plus rapide que l'
sort
outil pour les grandes entrées, car le programme ci-dessus utilise une table de hachage pour identifier les lignes en double au lieu d'une liste triée. (Hélas, il place des lignes de nombre identique dans un ordre arbitraire au lieu d'un ordre naturel; cela peut être modifié et toujours plus rapide que deuxsort
invocations.)Format de sortie
Si vous voulez plus de flexibilité sur le format de sortie , vous pouvez regarder dans le
print()
et lesformat()
fonctions intégrées.Par exemple, si vous souhaitez imprimer le nombre de décomptes en octal avec jusqu'à 7 zéros de tête et suivi d'un onglet au lieu d'un caractère espace avec un terminateur de ligne NUL, remplacez la dernière ligne par:
Usage
Stockez le script dans un fichier, par exemple
sort_count.py
, et invoquez-le avec Python:la source
Traduisez les espaces blancs de tête en espaces blancs simples avec tr -s, puis imprimez la sortie du 2ème caractère avec cut -c.
la source