Mam kilka poleceń w skrypcie awk, które piszę:
print "Here are some players and their numbers, sorted by last name"
if(sum[x] > 500) {print x, $2}
Które wyjścia:
Here are some players and their numbers, sorted by last name
Lebron James 23
Kevin Durant 35
Kobe Bryant 24
Blake Griffin 32
Dikembe Mutumbo 55
Jak mogę użyć sort
polecenia w skrypcie awk, aby posortować TYLKO graczy i ich liczby?
command-line
text-processing
awk
KM142646
źródło
źródło
x
, a następnie ustawićPROCINFO["sorted_in"]
na tajemniczą wartość, następnie wypisz tablicę. Nie poszedłbym tam.... | sort -k2,2
....| sort -k2,2
jeśli istnieją inne wiersze, które należy wydrukować? Sprawdź edytowane pytanie.echo
linię nagłówka z powłoki, a następnie uruchomawk | sort
potok.Odpowiedzi:
możesz dodać
| sort -k2
do swojego polecenia. To posortuje alfabetycznie na podstawie drugiej kolumny.Przykład:
prowadzi do
źródło
{print x, $2}
bezpośrednio w kodzie skryptu? Podczas instalacji rurowej pojawia się błądif(sum[x] > 500) {print x, $2} | sort -k2
.if(sum[x] > 500) {print x, $2}
jest kodem Awk, podczas gdy| sort -k2
jest poleceniem powłoki. Oczywiście nie można mieszać tych dwóch, ponieważ są to różne języki. Zamiast tego należy zastosowaćsort
polecenie do danych wyjściowych interpretera Awk, który uruchamia fragment kodu Awk. Jeśli nie wiesz, co mam na myśli, rozwiń swoje pytanie, aby dać nam pełny obraz../my-script.sh | sort -k2
. 2. dodaj `| posortuj -k2` do wiersza skryptu, który generuje wynik podany w pytaniu.Chociaż nie poleciłbym tego (biorąc pod uwagę względną prostotę przesyłania wyników za pomocą zewnętrznego
sort
polecenia), możesz to zrobić przynajmniej w najnowszych wersjach GNU awk (co najmniej 4.0 IIRC), jak opisano w Sortowanie wartości i indeksów tablicy za pomocą gawkOto jak możesz to zaimplementować, zakładając, że masz dane w tablicy asocjacyjnej, w której znajduje się indeks
Firstname Lastname
. Najpierw musisz zdefiniować niestandardową funkcję porównania, która dzieli indeks, porównuje najpierwLastname
(jako remis)Firstname
np.Teraz możesz użyć
PROCINFO["sorted_in"]
metody sortowania tablic, o której mowa w komentarzach @zwetsSkładając to razem
Testowanie:
W mniejszych lub starszych wersjach awk najlepszym rozwiązaniem może być przechowywanie zaindeksowanych danych
Lastname Firstname
, sortowanie za pomocą konwencjonalnejasorti
, a następnie dzielenie i zamiana pól indeksów podczas przechodzenia przez tablicę, aby ją wydrukować:źródło
Aby
sort
użyć tylko drugiego pola oddzielonego spacjami, użyj klucza-k2,2
:domyślnie
sort
sortowanie odbywa się leksykograficznie.Zauważ, że jeśli nie podasz ostatniego pola dla klucza sortowania, tzn. Jeśli po prostu użyjesz,
-k2
możesz nie uzyskać pożądanego wyniku, ponieważ będzie tosort
zgodne ze wszystkimi polami zaczynającymi się od drugiego.Sprawdź również
man sort
.źródło
Próbować
Gdzie myscript.awk zawiera wyłącznie polecenia awk.
Jeśli twój skrypt jest skryptem powłoki, masz kilka opcji, w tym
./myscript.bash | sort -k2
Przepisz kod jako funkcję w skrypcie
Zamiast
Zrobić
Pamiętaj jednak, że możesz także zastosować sortowanie do struktury do ... done zamiast tworzyć funkcję.
źródło
Aby posortować dane do wydrukowania:
Załóżmy, że chcesz wydrukować drugie pole (oddzielone spacjami):
na przykład:
Jeśli chcesz wydrukować całość,
data.txt
ale posortowane według kolumny 2, to:Użyj tej logiki w swoich wymaganiach.
Możesz użyć
man sort
do ciekawszych funkcjisort
.źródło
co poniżej:
działa, kiedy testowałem.
źródło
Aby posortować dane wyjściowe do pliku:
źródło