Gegevens sorteren op basis van de tweede kolom van een bestand

Ik heb een bestand met twee kolommen en naantal rijen.

kolom 1 bevat namesen kolom2 age.

Ik wil de inhoud van dit bestand in oplopende volgorde sorteren op basis van de age(in de tweede kolom).

Het resultaat moet de namevan de jongste persoon weergeven, samen met nameen vervolgens de op één na jongste persoon enzovoort…

Alle suggesties voor een one-liner shell of bash-script.


Antwoord 1, autoriteit 100%

Je kunt de opdracht sortgebruiken:

sort -k2 -n yourfile

-n, --numeric-sortvergelijken op basis van numerieke tekenreekswaarde

Bijvoorbeeld:

$ cat ages.txt 
Bob 12
Jane 48
Mark 3
Tashi 54
$ sort -k2 -n ages.txt 
Mark 3
Bob 12
Jane 48
Tashi 54

Antwoord 2, autoriteit 26%

Oplossing:

sort -k 2 -n filename

meer uitgebreid geschreven als:

sort --key 2 --numeric-sort filename


Voorbeeld:

$ cat filename
A 12
B 48
C 3
$ sort --key 2 --numeric-sort filename 
C 3
A 12
B 48

Uitleg:

  • -k #– dit argument specificeert de eerste kolom die zal worden gebruikt om te sorteren. (merk op dat de kolom hier is gedefinieerd als een door witruimte gescheiden veld; het argument -k5sorteert beginnend met het vijfde veldin elke regel, niet het vijfde tekenin elke regel)

  • -n– deze optie specificeert een “numerieke sortering”, wat betekent dat de kolom moet worden geïnterpreteerd als een rij getallen in plaats van tekst.


Meer:

Andere veelvoorkomende opties zijn:

  • -r– deze optie keert de sorteervolgorde om. Het kan ook worden geschreven als –reverse.
  • -i– Deze optie negeert niet-afdrukbare tekens. Het kan ook worden geschreven als –ignore-nonprinting.
  • -b– Deze optie negeert voorloopspaties, wat handig is omdat witte spaties worden gebruikt om het aantal rijen te bepalen. Het kan ook worden geschreven als –ignore-leading-blanks.
  • -f– Deze optie negeert hoofdletters. “A”==”een”. Het kan ook worden geschreven als –ignore-case.
  • -t [nieuw scheidingsteken]– Met deze optie gebruikt de voorverwerking een andere operator dan spatie. Het kan ook worden geschreven als –field-separator.

Er zijn andere opties, maar dit zijn de meest voorkomende en handige, die ik vaak gebruik.


Antwoord 3, autoriteit 4%

Voor door tabs gescheiden waarden kan de onderstaande code worden gebruikt

sort -t$'\t' -k2 -n

-r kan worden gebruikt om gegevens in aflopende volgorde op te halen.
-n voor numerieke sortering
-k, –key=POS1[,POS2] waarbij k kolom in bestand is
Voor aflopende volgorde hieronder is de code

sort -t$'\t' -k2 -rn

Antwoord 4, autoriteit 2%

Gebruik sort.

sort ... -k 2,2 ...

Other episodes