sortera kommando i unix med numerisk sortering

Jag har fil1:

"$lvl=57" "$lvl=20" "$lvl=48" "$lvl=17" "$lvl=58" 

File2 I vill ha:

"$lvl=17" "$lvl=20" "$lvl=48" "$lvl=57" "$lvl=58" 

I grund och botten numeriskt sorterad fil1.

Kommentarer

  • När jag kör en vanlig Unix sort på din File1, utan alternativ, får jag din File2. Vad gör du annorlunda? Vad lämnar du ut av den här frågan?

Svar

Jag gillar -V –version-sort: det beter sig mycket bra i många situationer blandar strängar och siffror

sort -V 

Jag använder det här alternativet mycket ofta …

I vissa riktningar , ls -v för version-sort ls.

Svar

Du måste säga till sort -n att sortera på delen efter =:

sort -t = -k 2n 

Kommentarer

  • Jag tittade nyligen här ^^. Men en fråga till. Vad gör -k2n? Är det relaterat till numerisk sortering? tack.
  • @KasiyA -k definierar en sorteringsnyckel. Se mansidan för mer information. -k2n definierar en sorteringstangent som börjar vid det andra fältet och slutar i slutet av raden och gör det till en numerisk sorteringstangent.

Svar

Jag fann att du bara kör sort -h, det fungerar. De kallar det --human-numberic-sort.

sort -h file1 > file2 

Svar

använd sortering:

sort -n file1 > file2 

-n, –numeric-sort
jämför enligt strängens numeriska värde

 sort -g file1 > file 2 

-g, –general-numeric-sort

Kommentarer

  • Nej, alla dessa rader har samma ranking med sort -n eftersom de inte ' t börjar med ett tal. Anledningen till att det sorterar dem är sista utväg fullradssortering (lexiskt, inte numeriskt) gjort för rader med samma rangordning. Det skulle sortera "$lvl=17" före "$lvl=2".
  • @St é phaneChazelas tack för att ni påpekade.
  • För att parafrasera är -n och -g överflödiga här eftersom ingången inte är numerisk . Så det här svaret är vilseledande, därav downvote (notera också att -g och de långa alternativen är GNU-specifika).
  • men -g är bra allmänt numeriskt- sortera
  • Att ' fortfarande är för att sortera numeriska värden, skillnaden med -n är att den ' är inte begränsat till decimala heltal. Det skulle fortfarande sortera "$lvl=17" före "$lvl=2" som en del av den sista utvägsorteringen.

Svar

sort -n är vad du vill använda. Det sorterar när vi sorterar siffror. sort -k 2 -n file1

Kommentarer

  • Men OP vill sortera i stigande ordning, vilket är standard. Varför föreslår du omvänd ordning?
  • ovanstående är korrekt när fält är separerade med flikar eller mellanslag och fungerar inte i OP ' s fall.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *