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:
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 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 -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 "." 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 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:
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:
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 '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 '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:
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 '/./=' 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 -n 7p archivo.txt
Brug af kommandoen mindre
til tilføj nummeret til standardoutputtet for en fil ved hjælp af mindre, løb:
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 "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.
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
Fremragende bidrag! Mange tak!
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?