Mam ten kod w skrypcie powłoki:
sort input | uniq -c | sort -nr > output
Plik wejściowy nie zawierał wcześniejszych białych znaków, ale dane wyjściowe mają. Jak to naprawić? To jest bash
command-line
uniq
Jeremy Wik
źródło
źródło
perl -pe 's/ *(\d+) /$1\t/'
( tutaj kilka alternatyw ). Ruruj do schowka,xclip -selection c
aby wkleić bezpośrednio do arkusza kalkulacyjnego.uniq -c
dodaje wiodące białe znaki. Na przykładMożesz dodać polecenie na końcu potoku, aby je usunąć. Na przykład
źródło
FWIW możesz użyć innego narzędzia do sortowania dla większej elastyczności. Python jest jednym z takich narzędzi.
Źródło
Teoretycznie byłoby to nawet szybsze niż
sort
narzędzie do dużych danych wejściowych, ponieważ powyższy program używa tabeli skrótów do identyfikacji duplikatów linii zamiast posortowanej listy. (Niestety, umieszcza wiersze o identycznej liczbie w arbitralnym, a nie naturalnym porządku; można to zmienić i nadal być szybsze niż dwiesort
inwokacje).Format wyjściowy
Jeśli chcesz więcej elastyczności na format wyjściowy można przyjrzeć się
print()
iformat()
wbudowanych funkcji.Na przykład, jeśli chcesz wydrukować liczbę ósemkową z maksymalnie 7 zerami wiodącymi, a następnie znakiem tabulacji zamiast znaku spacji z zakończeniem linii NUL, zamień ostatni wiersz na:
Stosowanie
Zapisz skrypt w pliku, powiedzmy
sort_count.py
, i wywołaj go za pomocą Pythona:źródło
Przetłumacz wiodące białe znaki na pojedyncze białe znaki za pomocą tr -s, a następnie wydrukuj wynik od drugiego znaku za pomocą cut -c.
źródło