sort(1p)

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök

sort(1p)

PROLOG

Denna manualsida är en del av POSIX Programmer's Manual. Linux-implementationen av detta gränssnitt kan skilja sig åt (se motsvarande Linux-manualsida för detaljer om Linux-beteende), eller så kanske gränssnittet inte är implementerat i Linux.

NAMN

sort — sortera, slå samman eller kontrollera ordningen i textfiler

SYNOPSIS

sort [-m] [-o utdata] [-bdfinru] [-t tecken] [-k nyckeldef]... [fil...]

sort [-c|-C] [-bdfinru] [-t tecken] [-k nyckeldef] [fil]

BESKRIVNING

Verktyget sort ska utföra en av följande funktioner:

  1. Sortera raderna från alla namngivna filer tillsammans och skriva resultatet till angiven utdata.
  2. Slå samman rader från alla namngivna, redan sorterade, filer och skriva resultatet till angiven utdata.
  3. Kontrollera att en enda indatafil är korrekt försorterad.

Jämförelser ska baseras på en eller flera sorteringsnycklar som hämtas från varje indatarad (eller, om inga sorteringsnycklar anges, hela raden fram till, men inte inklusive, avslutande radmatningstecken). Jämförelser ska utföras med sorteringsordningen för aktuell lokal. Om denna sorteringsordning inte har en total ordning för alla tecken (se Base Definitions-volymen av POSIX.1-2017, avsnitt 7.3.2, LC_COLLATE), bör indatarader som sorteras lika dessutom jämföras byte för byte med sorteringsordningen för POSIX-lokalen.

FLAGGOR

Verktyget sort ska följa Base Definitions-volymen av POSIX.1-2017, avsnitt 12.2, Utility Syntax Guidelines, med undantag för riktlinje 9. Flaggan -k nyckeldef bör följa flaggorna -b, -d, -f, -i, -n och -r. Dessutom kan + kännas igen som flaggavgränsare på samma sätt som -.

Följande flaggor ska stödjas:

-c

Kontrollera att den enda indatafilen är ordnad enligt argumenten och sorteringsordningen i aktuell lokal. Ingen utdata ska skickas till standardutmatningen. Avslutningskoden ska ange om oordning upptäcktes eller om ett fel uppstod. Om oordning upptäcks (eller, med -u, en dubblettnyckel), ska ett varningsmeddelande skrivas till standardfel som anger var oordningen eller dubblettnyckeln hittades.

-C

Samma som -c, utom att inget varningsmeddelande ska skrivas till standardfel om oordning eller, med -u, en dubblettnyckel upptäcks.

-m

Endast sammanslagning. Indatafilen ska antas redan vara sorterad.

-o utdata

Ange namnet på en utdatafil som ska användas i stället för standardutmatningen. Denna fil kan vara samma som en av indatafilerna.

-u

Unik: undertryck alla utom en i varje uppsättning rader som har lika nycklar. Om flaggan används med -c kontrolleras dessutom att det inte finns några rader med dubblettnycklar, utöver kontrollen av att indatafilen är sorterad.

Följande flaggor ska åsidosätta de förvalda ordningsreglerna. När ordningsflaggor förekommer oberoende av specifikationer för nyckelfält ska de begärda fältordningsreglerna tillämpas globalt på alla sorteringsnycklar. När de är kopplade till en viss nyckel (se -k) ska de angivna ordningsflaggorna åsidosätta alla globala ordningsflaggor för den nyckeln.

-d

Ange att endast blanktecken och alfanumeriska tecken, enligt aktuell inställning av LC_CTYPE, ska vara betydelsefulla vid jämförelser. Beteendet är odefinierat för en sorteringsnyckel där även -i eller -n gäller.

-f

Behandla alla gemena tecken som har versala motsvarigheter, enligt aktuell inställning av LC_CTYPE, som sina versala motsvarigheter vid jämförelse.

-i

Ignorera alla tecken som inte är utskrivbara, enligt aktuell inställning av LC_CTYPE. Beteendet är odefinierat för en sorteringsnyckel där även -n gäller.

-n

Begränsa sorteringsnyckeln till en inledande numerisk sträng, bestående av valfria blanktecken, ett valfritt bindestreck-minus-tecken och noll eller fler siffror med ett valfritt radixtecken och tusentalsavgränsare (enligt definitionen i aktuell lokal), som ska sorteras efter aritmetiskt värde. En tom siffersträng ska behandlas som noll. Inledande nollor och tecken på noll ska inte påverka ordningen.

-r

Vänd jämförelsernas riktning.

Behandlingen av fältavgränsare kan ändras med följande flaggor:

-b

Ignorera inledande blanktecken när start- och slutpositioner för en begränsad sorteringsnyckel bestäms. Om -b anges före den första -k-flaggan ska den tillämpas på alla -k-flaggor. Annars kan -b kopplas separat till varje -k fält_start eller fält_slut-flaggargument (se nedan).

-t tecken

Använd tecken som fältavgränsare. tecken ska inte betraktas som en del av ett fält (även om det kan ingå i en sorteringsnyckel). Varje förekomst av tecken ska vara betydelsefull (till exempel avgränsar <tecken><tecken> ett tomt fält). Om -t inte anges ska blanktecken användas som förvalda fältavgränsare. Varje maximal, icke-tom sekvens av blanktecken som följer efter ett icke-blanktecken ska vara en fältavgränsare.

Sorteringsnycklar kan anges med följande flaggor:

-k nyckeldef

Argumentet nyckeldef är en definition av ett begränsat sorteringsnyckelfält. Formatet för denna definition är:
fält_start[type][,fält_slut[type]]
Där fält_start och fält_slut definierar ett nyckelfält begränsat till en del av raden (se avsnittet UTÖKAD BESKRIVNING), och type är en eller flera modifierare från listan med tecknen b, d, f, i, n, r. Modifieraren b ska fungera som flaggan -b, men bara gälla för den fält_start eller fält_slut som den är kopplad till. De andra modifierarna ska fungera som motsvarande flaggor, men bara gälla för det nyckelfält som de är kopplade till. De ska ha denna effekt om de anges med fält_start, fält_slut eller båda. Om någon modifierare kopplas till fält_start eller fält_slut ska ingen flagga gälla för någondera. Implementationer ska stödja minst nio förekomster av flaggan -k, vilka ska vara betydelsefulla i kommandoradsordning. Om ingen -k-flagga anges ska hela raden användas som förvald sorteringsnyckel.
När det finns flera nyckelfält ska senare nycklar jämföras först efter att alla tidigare nycklar jämförts lika. Utom när flaggan -u anges ska rader som annars jämförs lika ordnas som om ingen av flaggorna -d, -f, -i, -n eller -k fanns (men med -r fortfarande i kraft om den angavs) och med alla byte i raderna betydelsefulla för jämförelsen. Ordningen i vilken rader som fortfarande jämförs lika skrivs är ospecificerad.

OPERANDER

Följande operand ska stödjas:

fil

Sökvägsnamn till en fil som ska sorteras, slås samman eller kontrolleras. Om inga fil-operander anges, eller om en fil-operand är -, ska standardindata användas. Om sort stöter på ett fel när en fil-operand öppnas eller läses kan programmet avsluta utan att skriva någon utdata till standardutmatningen eller bearbeta senare operander.

STDIN

Standardindata ska endast användas om inga fil-operander anges, eller om en fil-operand är -. Se avsnittet INDATAFILER.

INDATAFILER

Indatafilerna ska vara textfiler, förutom att verktyget sort ska lägga till ett radmatningstecken i slutet av en fil som slutar med en ofullständig sista rad.

MILJÖVARIABLER

Följande miljövariabler ska påverka körningen av sort:

LANG

Tillhandahåll ett förvalt värde för internationaliseringsvariabler som är oinställda eller tomma. Se Base Definitions-volymen av POSIX.1-2017, avsnitt 8.2, Internationalization Variables, för prioriteten mellan internationaliseringsvariabler som används för att bestämma värden för lokalkategorier.

LC_ALL

Om den är satt till ett icke-tomt strängvärde, åsidosätt värdena för alla andra internationaliseringsvariabler.

LC_COLLATE

Bestäm lokalen för ordningsregler.

LC_CTYPE

Bestäm lokalen för tolkningen av byteföljder av textdata som tecken (till exempel enkelbyte- i stället för multibyte-tecken i argument och indatafiler) och beteendet för teckenklassificering för flaggorna -b, -d, -f, -i och -n.

LC_MESSAGES

Bestäm lokalen som ska användas för att påverka format och innehåll i diagnostiska meddelanden som skrivs till standardfel.

LC_NUMERIC

Bestäm lokalen för definitionen av radixtecken och tusentalsavgränsare för flaggan -n.

NLSPATH

Bestäm platsen för meddelandekataloger för behandlingen av LC_MESSAGES.

ASYNKRONA HÄNDELSER

Förvalt.

STDOUT

Om inte flaggorna -o eller -c gäller ska standardutmatningen innehålla den sorterade indatan.

STDERR

Standardfel ska användas för diagnostiska meddelanden. När -c anges och oordning upptäcks (eller om -u också anges och en dubblettnyckel upptäcks), ska ett meddelande skrivas till standardfel som identifierar indataraden där oordning (eller dubblettnyckel) upptäcktes. Ett varningsmeddelande om korrigering av en ofullständig sista rad i en indatafil kan genereras, men behöver inte påverka den slutliga avslutningsstatusen.

UTDATAFILER

Om flaggan -o gäller ska den sorterade indatan skrivas till filen utdata.

UTÖKAD BESKRIVNING

Notationen:

-k fält_start[type][,fält_slut[type]]

ska definiera ett nyckelfält som börjar vid fält_start och slutar vid fält_slut, inklusive båda ändpunkterna, om inte fält_start faller efter radens slut eller efter fält_slut, i vilket fall nyckelfältet är tomt. Ett saknat fält_slut ska betyda radens sista tecken.

Ett fält består av en maximal sekvens av icke-avgränsande tecken och, när flaggan -t saknas, eventuell föregående fältavgränsare.

Delen fält_start av flaggargumentet nyckeldef ska ha formen:

fält_nummer[.första_tecken]

Fält och tecken inom fält ska numreras från 1. Delarna fält_nummer och första_tecken, tolkade som positiva decimala heltal, ska ange det första tecknet som ska användas som del av en sorteringsnyckel. Om .första_tecken utelämnas ska det syfta på fältets första tecken.

Delen fält_slut av flaggargumentet nyckeldef ska ha formen:

fält_nummer[.sista_tecken]

fält_nummer ska vara som beskrivet ovan för fält_start. Delen sista_tecken, tolkad som ett icke-negativt decimalt heltal, ska ange det sista tecknet som ska användas som del av sorteringsnyckeln. Om sista_tecken utvärderas till noll eller .sista_tecken utelämnas ska det syfta på det sista tecknet i det fält som anges av fält_nummer.

Om flaggan -b eller typmodifieraren b gäller ska tecken inom ett fält räknas från det första icke-blanktecknet i fältet. Detta ska gälla separat för första_tecken och sista_tecken.

AVSLUTNINGSSTATUS

Följande avslutningsvärden ska returneras:

0     Alla indatafiler skrevs ut utan fel, eller -c angavs och
      indatafilen var korrekt sorterad.

1     Med flaggan -c var filen inte ordnad enligt specifikationen,
      eller om både -c och -u angavs hittades två indatarader med
      lika nycklar.

>1    Ett fel uppstod.

KONSEKVENSER AV FEL

De förvalda kraven ska gälla, förutom att om sort stöter på ett fel när en fil-operand öppnas eller läses kan programmet avsluta utan att skriva någon utdata till standardutmatningen eller bearbeta senare operander.

Följande avsnitt är informativa.

ANVÄNDNING I PROGRAM

Det förvalda värdet för -t, blanktecken, har andra egenskaper än till exempel -t "<space>". Om en rad innehåller:

<space><space>foo

sker följande behandling med förvald separation jämfört med när ett <space> väljs uttryckligen:

┌───────┬───────────────────┬──────────────┐
│ Fält  │      Förvalt      │ -t "<space>" │
├───────┼───────────────────┼──────────────┤
│   1   │ <space><space>foo │ tomt         │
│   2   │ tomt              │ tomt         │
│   3   │ tomt              │ foo          │
└───────┴───────────────────┴──────────────┘

Den inledande fältavgränsaren själv ingår i ett fält när -t inte används. Exempelvis returnerar detta kommando avslutningsstatus noll, vilket betyder att indatan redan var sorterad:

sort -c -k 2 <<eof
y<tab>b
x<space>a
eof

Detta förutsätter att ett <tab> föregår <space> i aktuell sorteringsordning. Fältavgränsaren ingår inte i ett fält när den uttryckligen sätts via -t. Detta är historisk praxis och tillåter användning som:

sort -t "|" -k 2n <<eof
Atlanta|425022|Georgia
Birmingham|284413|Alabama
Columbia|100385|South Carolina
eof

där det andra fältet kan sorteras korrekt numeriskt utan hänsyn till den icke-numeriska fältavgränsaren.

Formuleringen i avsnittet FLAGGOR klargör att flaggorna -b, -d, -f, -i, -n och -r måste komma före den första sorteringsnyckeln som anges om de ska tillämpas på alla angivna nycklar. Sättet detta beskrivs i denna volym av POSIX.1-2017 motsvarar historisk praxis, inte historisk dokumentation. Resultaten är ospecificerade om dessa flaggor anges efter en -k-flagga.

Flaggan -f kanske inte fungerar som förväntat i lokaler där det inte finns en ett-till-ett-mappning mellan en versal och en gemen bokstav.

När sort används för att bearbeta sökvägsnamn rekommenderas att LC_ALL, eller åtminstone LC_CTYPE och LC_COLLATE, sätts till POSIX eller C i miljön, eftersom sökvägsnamn kan innehålla byteföljder som inte bildar giltiga tecken i vissa lokaler. I sådana fall skulle verktygets beteende vara odefinierat. I POSIX-lokalen är varje byte ett giltigt enkelbyte-tecken, och därför undviks detta problem.

Om sorteringsordningen i aktuell lokal inte har en total ordning för alla tecken kan detta påverka beteendet hos sort på följande sätt:

  • Eftersom sort -u undertrycker rader med dubblettnycklar, undertrycker den rader som sorteras lika men inte är identiska.
  • Utdata från sort (utan -u) kan innehålla identiska rader som inte ligger intill varandra, om implementationen inte utför den rekommenderade ytterligare byte-för-byte-jämförelsen av rader som sorteras lika. Detta påverkar användningen av sort tillsammans med comm och uniq; se ANVÄNDNING I PROGRAM för dessa verktyg.

EXEMPEL

  1. Följande kommando sorterar innehållet i infile med det andra fältet som sorteringsnyckel:
sort -k 2,2 infile
  1. Följande kommando sorterar, i omvänd ordning, innehållet i infile1 och infile2, placerar utdata i outfile och använder det andra tecknet i det andra fältet som sorteringsnyckel (förutsatt att det första tecknet i det andra fältet är fältavgränsaren):
sort -r -o outfile -k 2.2,2.2 infile1 infile2
  1. Följande kommando sorterar innehållet i infile1 och infile2 med det andra icke-blanktecknet i det andra fältet som sorteringsnyckel:
sort -k 2.2b,2.2b infile1 infile2
  1. Följande kommando skriver ut System V-lösenordsfilen (användardatabasen) sorterad efter numeriskt användar-ID (det tredje kolonseparerade fältet):
sort -t : -k 3,3n /etc/passwd
  1. Följande kommando skriver ut raderna i den redan sorterade filen infile och undertrycker alla utom en förekomst av rader som har samma tredje fält:
sort -um -k 3.1,3.0 infile

BAKGRUND

Exempel i viss historisk dokumentation anger att flaggorna -um med en indatafil behåller den första i varje uppsättning rader med lika nycklar. Detta beteende ansågs vara en implementationsdetalj och standardiserades inte.

Flaggan -z utelämnades. Den är inte standardpraxis på de flesta system och är inkonsekvent med att använda sort för att sortera flera filer var för sig och sedan slå samman dem. Texten om -z i historisk dokumentation tycktes kräva att implementationer bestämde korrekt buffertlängd under sorteringsfasen, men inte under sammanslagningsfasen.

Flaggan -y utelämnades på grund av bristande portabilitet. Flaggan -M, som finns i System V, utelämnades på grund av bristande portabilitet vid internationell användning.

En odokumenterad flagga -T finns i vissa implementationer. Den används för att ange en katalog för mellanliggande filer. Implementationer uppmuntras att stödja användning av miljövariabeln TMPDIR i stället för att lägga till en flagga för denna funktion.

Flaggan -k lades till för att bemöta två invändningar. För det första stämmer den nollbaserade räkning som användes av sort inte med andra verktygskonventioner. För det andra uppfyllde den inte kraven i syntaxriktlinjerna.

Historisk dokumentation anger att ”att sätta -n implicerar -b”. Beskrivningen av -n anger redan att valfria inledande blanktecken tolereras vid jämförelsen. Om -b aktiveras, snarare än impliceras, av -n, får detta ovanliga sidoeffekter. När en teckenförskjutning används i en kolumn med tal (till exempel för att sortera modulo 100), mäts denna förskjutning relativt den mest signifikanta siffran, inte relativt kolumnen. På rekommendation från författaren till det ursprungliga sort-verktyget har -b-implikationen utelämnats från denna volym av POSIX.1-2017, och ett program som vill uppnå de tidigare nämnda sidoeffekterna måste ange flaggan -b uttryckligen.

Tidigare versioner av denna standard tillät att flaggan -o förekom efter operander. Historisk praxis tillät att alla flaggor blandades med operander. Denna version av standarden tillåter implementationer att acceptera flaggor efter operander, men konforma program bör inte använda denna form.

Tidigare versioner av denna standard tillät också flaggorna - nummer och + nummer. Dessa flaggor specificeras inte längre av POSIX.1-2008 men kan finnas i vissa implementationer.

Historiska implementationer producerade ett meddelande på standardfel när -c angavs och oordning upptäcktes, och när -c och -u angavs och en dubblettnyckel upptäcktes. En tidigare version av denna standard innehöll formuleringar som inte tydliggjorde att detta meddelande var tillåtet, och vissa implementationer tog bort meddelandet för att vara säkra på att de följde standardens krav. Inför denna skillnad i beteende kunde interaktiva användare som ville vara säkra på visuell återkoppling i stället för bara avslutningskod 1 använda ett kommando som:

sort -c file || echo disorder

oavsett om sort-verktyget gav ett meddelande i detta fall. Men det var inte lätt för en användare att hitta var oordningen eller dubblettnyckeln inträffade i implementationer som inte producerar ett meddelande, särskilt när vissa delar av indataraden inte ingick i nyckeln och när en eller flera av flaggorna -b, -d, -f, -i, -n eller -r eller nyckeldef-typmodifierare användes. POSIX.1-2008 kräver att ett meddelande produceras i detta fall. POSIX.1-2008 innehåller också flaggan -C, vilket ger användare möjlighet att välja något av beteendena.

När oordning eller en dubblett hittas när flaggan -c anges, skriver vissa implementationer ett meddelande som innehåller den första raden som är ur ordning eller innehåller en dubblettnyckel. Andra skriver ett meddelande som anger radnumret för den felande raden. Denna standard tillåter båda typerna av meddelanden.

Implementationer uppmuntras att utföra den rekommenderade ytterligare byte-för-byte-jämförelsen av rader som sorteras lika, även om detta kan påverka effektiviteten. Effektivitetsförlusten kan mildras genom att bara utföra den extra jämförelsen om den aktuella lokalens sorteringsordning inte har en total ordning för alla tecken (om implementationen tillhandahåller ett sätt att fråga detta), eller genom att bara utföra den extra jämförelsen om lokalnamnet som är kopplat till kategorin LC_COLLATE har en @-modifierare i namnet (eftersom lokaler utan en @-modifierare bör ha en total ordning för alla tecken — se Base Definitions-volymen av POSIX.1-2017, avsnitt 7.3.2, LC_COLLATE). Observera att om implementationen tillhandahåller en stabil sortering-flagga som utökning (vanligen -s), bör den extra jämförelsen inte utföras när denna flagga har angetts.

FRAMTIDA RIKTNING

En framtida version av denna standard kan komma att kräva att om sorteringsordningen i aktuell lokal inte har en total ordning för alla tecken, ska alla indatarader som sorteras lika när de jämförs som hela rader dessutom jämföras byte för byte med sorteringsordningen för POSIX-lokalen.

SE ÄVEN

comm(1p), join(1p), uniq(1p)

Base Definitions-volymen av POSIX.1-2017, avsnitt 7.3.2, LC_COLLATE, kapitel 8, Environment Variables, avsnitt 12.2, Utility Syntax Guidelines

System Interfaces-volymen av POSIX.1-2017, toupper(3p)

COPYRIGHT

Delar av denna text är återgivna och reproducerade i elektronisk form från IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. Om det finns någon avvikelse mellan denna version och den ursprungliga IEEE- och The Open Group-standarden är den ursprungliga IEEE- och The Open Group-standarden det avgörande dokumentet. Den ursprungliga standarden kan hämtas online på http://www.opengroup.org/unix/online.html .

Eventuella typografiska fel eller formateringsfel som finns på denna sida har sannolikt uppstått vid konverteringen av källfilerna till manualsidesformat. För att rapportera sådana fel, se https://www.kernel.org/doc/man-pages/reporting_bugs.html .

IEEE/The Open Group                2017                          SORT(1P)


Sidslut

Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/sort.1p.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp hemma som har sponsrat Linux.se med webbhotell.