Biorąc pod uwagę wkład:
hello: world foo bar baz
bar:
baz: bin boop bop fiz bang beep
bap: bim bam bop
boatkeeper: poughkeepsie
Chciałbym posortować to na większość słów na górze, przynajmniej na końcu, tak:
baz: bin boop bop fiz bang beep
hello: world foo bar baz
bap: bim bam bop
boatkeeper: poughkeepsie
bar:
Jak mam to zrobić za pomocą sort
innego narzędzia?
text-processing
sort
Caleb Xu
źródło
źródło
bin: bop boop
wcześniejboatkeeper: poughkeepsie
. Jeśli dwa wiersze dzielą tę samą liczbę słów, wolałbym, aby krawaty były alfabetycznie, ale nie jest to wymagane.Odpowiedzi:
Możesz zrobić coś takiego:
Używamy
awk
do prefiksu liczby pól w każdej linii. Następniesort
pod tym numerem i usuwamy go za pomocącut
.źródło
W najnowszym GNU
awk
można użyćPROCINFO
tablicy do zdefiniowania wielu parametrów wewnętrznych, w tym kolejności drukowania elementów tablicy (kontrolowanych przez element"sorted_in"
). W ten sposób możemy zbudować i zindeksować tablicę z wartościąNF" "NR
, które elementy mają wartość,$0
i wydrukować ją w pożądanym wyniku, w twoim przypadku byłoby to"@ind_num_desc"
:źródło
NF" "$0" "NR
, miałbyś tylkoNR
mechanizm rezerwowy / obsługi duplikatów.cmp_func()
- gnu awk na to pozwala.Perl One-Liner:
Jeśli chcesz zerwać więzi w kolejności alfabetycznej:
źródło
Poprzez python.
lub
źródło