Føj linjenumre til standardoutput af tekstfiler i terminalen

om tilføj linjer

I den næste artikel vil vi se nogle måder at tilføj linjenumre til tekstfiler som vi visualiserer fra terminal. Hvis du nogensinde har spekuleret på, hvordan du tilføjer disse linjenumre til standardoutputtet for dine Gnu / Linux-tekstfiler, vil denne korte artikel prøve at forklare forskellige måder at gøre det på.

Der er flere måder at føje linjenumre til en tekstfil. Dernæst vil vi se 6 forskellige metoder til at gøre det. Jeg forestiller mig, at der ud over dem, som du vil kunne se nedenfor, vil være nogle andre måder, men til at begynde med er disse nok.

Føj linjenumre til standard tekstfiloutput

Til at begynde med skal vi oprette en fil, der hedder file.txt. I det vil jeg tilføje et par linjer for at give indhold, som identificeres. For at se indholdet af den fil, jeg lige har oprettet, åbner vi terminalen (Ctrl + Alt + T) og skriver i den:

kattelinjer

cat archivo.txt

Brug kommandoen nl

Som det kan ses af output fra kat-kommandoen, har filen 10 linjer, hvoraf tre er tomme. Vi tilføjer linjenumre ved hjælp af nl kommando. For at gøre det skal du køre:

nl linjer

nl archivo.txt

Som det er set i den forrige fangst, kommandoen nl ignorerer tomme linjer. Bare tilføj tallene til ikke-tomme linjer. Hvis du vil nummer alle linjer, inklusive blanke linjer, kør:

nl -ba linjer

nl -b a archivo.txt

Derudover kan vi gøre det for at få større klarhed, når vi læser resultatet tilføj et symbol efter tallene. Hvis du f.eks. Vil tilføje en periode efter tallene, skal du køre:

nl-s priklinjer

nl -s "." archivo.txt

Du ønsker det måske juster outputbredden. Brug dette for at gøre det -w mulighed med en variabel værdi som det er vist i følgende:

nl w3 linjer

nl -w3 archivo.txt

Brug af kat-kommandoen

Katkommandoen bruges til at vise indholdet af en fil, som det ses i det første skærmbillede af denne artikel. Hvis du vil føje tal til output af en fil, brug -n som det er vist i følgende:

kat -n linjer

cat -n archivo.txt

Du kan være interesseret videregive standardoutput til en ny fil. For at gøre det skal du bare køre kommandoen som vist nedenfor:

cat -n archivo.txt > nuevoarchivo.txt

Brug af kommandoen awk

Dette er måske den mest komplekse metode til det opnåede resultat. At tilføje linjenumre til filoutput ved hjælp af kommandoen awk, løb:

akutte linjer

awk 'BEGIN{i=1} /.*/{printf "%d.% s\n",i,$0; i++}' archivo.txt

Som du har set, har jeg tildelt startnummer som 1 i BEGIN-parameteren. Vi kan tildele ethvert andet indledende nummer efter eget valg, for eksempel 5, som det kan ses nedenfor:

awk starter kl. 5

awk 'BEGIN{i=5} /.*/{printf "%d.% s\n",i,$0; i++}' archivo.txt

Brug følgende kommando hvis du ikke vil tage de tomme linjer i betragtning:

awk ingen blanke linjer

awk 'BEGIN{i=0} {if($0 !~ /^$/) {printf ("%d.%s \n",i,$0); i++} else { print $0} } ' archivo.txt

Hvis du synes, at ovenstående kommandoer er lidt vanskelige at huske, skal du bruge følgende kommando, som giver dig det samme resultat som den første, der vises med AWK-kommandoen:

akut FNR

awk '{ print FNR " " $0 }' archivo.txt

Brug af sed-kommandoen

For at tilføje linjenummer til standardoutput af en fil ved hjælp af kommandoen sed, løb:

sed linjer

sed '/./=' archivo.txt | sed '/./N; s/\n/ /'

Sed-kommandoen har en cool funktion at nævne. Kan vise en bestemt linje fra en fil. For eksempel for at få vist den syvende linje i vores fil skal du køre:

sed betonlinje

sed -n 7p archivo.txt

Brug af kommandoen mindre

til tilføj nummeret til standardoutputtet for en fil ved hjælp af mindre, løb:

mindre -n

less -N archivo.txt

Brug af grep-kommandoen

Grep-kommandoen kan bruges til at søge efter en linje, der indeholder specifik tekst. Hvis du ønsker tilføj linjenumre til de linjer, der indeholder den søgte tekst, løb:

grep -n

grep -n "línea" archivo.txt

Husk, at denne kommando kun tilføjer numrene til de linjer, der indeholder søgestrengen. Som det ses på skærmbilledet, farver det også den søgte tekst. Alt andet i den givne fil springes over.

Og det er det, selv jeg er nødt til at sige det disse kommandoer har andre muligheder, som de kan supplere eller udvide dem, der er beskrevet i denne artikel. For mere information om de kommandoer, der er navngivet her, kan du konsultere mand sider.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   ingen sagde han

    i awk-kommandoer behøver du ikke søge efter regulære udtryk "/.*/"
    som standard opdeler den allerede filen i linjer, og $ 0 indeholder linjen, så

    awk 'BEGIN {i = 1} {printf "% 03d:% s \ n", i, $ 0; i ++} 'file.txt

    fungerer det samme (og bedre) end

    awk 'BEGIN {i = 1} /.*/ [printf "% d.% s \ n", i, $ 0; i ++} 'file.txt

  2.   Billede af Miguel Quintana sagde han

    Fremragende bidrag! Mange tak!

  3.   rodrigo måne sagde han

    Før du begynder en venlig hilsen.

    Jeg har her et problem med følgende script.

    Oplysninger om de linjer, der matcher en søgning, hentes fra en fil og gemmes i en variabel.
    Eksempel:
    værdier = `awk -F«: »'{udskriv $ 1» »$ 2» »$ 3}' hociporky | grep "201025" -n`

    Derefter gentages du gennem variablen og ser derefter efter en bestemt linje i filen.
    Eksempel:
    for værdi i $ -værdier; gør
    sed -n "$ {value} p" fil
    færdig

    Men dette sender en fejl
    sed: -e udtryk # 1, char 1: ukendt kommando: `

    Kan nogen forklare mig hvorfor og hvordan kunne dette løses?