Mam plik dwóch kolumn i n
liczby wierszy.
kolumna 1 zawiera names
i kolumna 2 age
.
Chcę posortować zawartość tego pliku w porządku rosnącym na podstawie age
(w drugiej kolumnie).
Wynik powinien wyświetlać name
najmłodszą osobę, name
a następnie drugą najmłodszą osobę i tak dalej ...
Wszelkie sugestie dotyczące powłoki jednowarstwowej lub skryptu bash.
Odpowiedzi:
Możesz użyć
sort
polecenia :Na przykład:
źródło
-h
zamiast-n
posortuje wartości czytelne dla ludzi, takie jak2G
lub,3K
a także liczby oddzielone przecinkami, np.1,234.5
LC_ALL=C
aby uzyskać tradycyjny porządek sortowania, który używa rodzimych wartości bajtów.” (w przypadku braku dopasowania ciągu-n
)sort -t$'\t' -k2 -n FILE
Rozwiązanie:
sort -k 2 -n filename
bardziej szczegółowo napisane jako:
sort --key 2 --numeric-sort filename
Przykład:
Wyjaśnienie:
-k # - ten argument określa pierwszą kolumnę, która zostanie użyta do sortowania. (zwróć uwagę, że kolumna tutaj jest zdefiniowana jako białe pole rozdzielone; argument
-k5
będzie sortowany począwszy od piątego pola w każdym wierszu, a nie piątego znaku w każdym wierszu)-n - ta opcja określa „sortowanie numeryczne”, co oznacza, że kolumna powinna być interpretowana jako wiersz liczb zamiast tekstu.
Więcej:
Inne typowe opcje obejmują:
Istnieją inne opcje, ale są to najczęściej używane i pomocne, z których często korzystam.
źródło
-t
była prawdziwa oszczędność życia !! gdy twoje kolumny mają spacje, a kolumny różnią się danym znakiem, takim jak,
tabulatorW przypadku wartości rozdzielanych tabulatorami można zastosować poniższy kod
-r można użyć do pobierania danych w kolejności malejącej.
-n do sortowania numerycznego
-k, --key = POS1 [, POS2] gdzie k to kolumna w pliku
W porządku malejącym poniżej znajduje się kod
źródło
Zastosowanie
sort
.źródło