Hvordan kører man forkert for et antal linjer.?

Jeg vil udtrække nogle linjer med awk. Er det muligt at udføre følgende opgave:

ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i" 

Hvordan kan jeg vise detaljerne fra linjenumre 122 til 129?

Kommentarer

  • Hvis du skulle gøre dette i en løkke, foreslår jeg ' d sed metode, da sed er så meget mindre (og indlæses hurtigere) end awk.

Svar

Du har ikke forstået, hvordan awk fungerer. Det angivne “program” udføres altid en gang for hver linje (eller “post” i awk parlance) af input, der er ikke behov for FOR eller enhver lignende konstruktion. Brug bare:

verbose method

ls -l | awk "NR>=122 && NR<=129 { print }" 

mere kompakt metode

ls -l | awk "NR==122,NR==129" 

Denne giver et interval for NR, som er “Number Record”, typisk dette er den aktuelle linje awk behandler.

Kommentarer

  • Faktisk den typiske awk kode til en sådan opgave er normalt ls -l | awk 'NR==122,NR==129'.
  • hvad er kommandoen for at få sidste 100 linje fra filen ved hjælp af awk
  • @ShihabudheenKM Kan se på dette: stackoverflow.com/questions/12546919/…

Svar

En anden alternativ metode ville være at bruge sed :

Men hvis det, som dit spørgsmål antyder, er det vigtigt at bruge awk til dette, gå med manatworks kommentar til Zrajms svar. Som awk “s dokumentation siger:

 A pattern may consist of two patterns separated by a comma; in this case, the action is performed for all lines from an occurrence of the first pattern though an occurrence of the second. 

Så hvis du vil, kan du også gøre mere avancerede betingelser. For eksempel:

ls -l | awk "NR==122,/foobar/" 

Dette starter output ved linje 122 og fortsætter indtil en linje indeholdt ordet “foobar”.

Hvis du fortæller os den aktuelle brugssag, kan vi muligvis hjælpe med svar, der giver en bedre løsning. Jeg er bange for, at det lyder som et XY-problem .

Svar

En anden måde at gør dette (selvom jeg foretrækker awk -metoden) ved hjælp af coreutils:

ls -l | tail -n +122 | head -n 8 

Svar

 awk "NR == 122,NR == 129{print $0}" file 

Her kan vi udtrække linjerne fra 122 til 129 i filen.

$0 bruges til at udskrive hele fildata mellem 122 og 129 linjer.

Kommentarer

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *