Eu tenho esse código em um script de shell:
sort input | uniq -c | sort -nr > output
O arquivo de entrada não tinha espaços em branco anteriores, mas a saída possui. Como faço para corrigir isso? Isso está no bash
command-line
uniq
Jeremy Wik
fonte
fonte
perl -pe 's/ *(\d+) /$1\t/'
( aqui algumas alternativas ). Também canalize para a área de transferência comxclip -selection c
para colar diretamente em uma planilha.uniq -c
adiciona espaços em branco à esquerda. Por exemploVocê pode adicionar um comando no final do pipeline para removê-lo. Por exemplo
fonte
FWIW, você pode usar uma ferramenta de classificação diferente para obter mais flexibilidade. Python é uma dessas ferramentas.
Fonte
Em teoria, isso seria ainda mais rápido do que a
sort
ferramenta para grandes entradas, pois o programa acima usa uma tabela de hash para identificar linhas duplicadas em vez de uma lista classificada. (Infelizmente, ele coloca linhas de contagem idêntica em uma ordem arbitrária e não natural; isso pode ser alterado e ainda ser mais rápido que duassort
invocações.)Formato de saída
Se você quiser mais flexibilidade do formato de saída você pode olhar para o
print()
eformat()
funções embutidas.Por exemplo, se você deseja imprimir o número da contagem em octal com até 7 zeros à esquerda e seguido por uma guia em vez de um caractere de espaço com um terminador de linha NUL, substitua a última linha por:
Uso
Armazene o script em um arquivo, digamos
sort_count.py
, e invoque-o com Python:fonte
Traduza os espaços em branco à esquerda em um espaço em branco com tr -s e imprima a saída do segundo caractere com cut -c.
fonte