Hvordan løpe vanskelig for noen antall linjer.?

Jeg vil trekke ut noen linjer med awk. Er det mulig å gjøre følgende oppgave:

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

Hvordan kan jeg vise detaljene fra linjenummer 122 til 129?

Kommentarer

  • Hvis du skulle gjøre dette i en løkke, foreslår jeg ' d sed metode, siden sed er så mye mindre (og lastes raskere) enn awk.

Svar

Du har ikke forstått hvordan awk fungerer. Det spesifiserte «programmet» blir alltid utført en gang for hver linje (eller «post» i vanskelig språk) av input, det er ikke behov for FOR eller hvilken som helst lignende konstruksjon. Bare bruk:

verbose method

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

mer kompakt metode

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

Dette gir en rekkevidde for NR, som er «Number Record», vanligvis dette er den nåværende linjen awk behandler.

Kommentarer

  • Egentlig den typiske awk kode for en slik oppgave er vanligvis ls -l | awk 'NR==122,NR==129'.
  • hva er kommandoen for å få de siste 100 linjene fra filen ved hjelp av awk
  • @ShihabudheenKM Kan ta en titt på dette: stackoverflow.com/questions/12546919/…

Svar

En annen alternativ metode vil være å bruke sed :

Men hvis det, som spørsmålet ditt antyder, er det viktig å bruke awk til dette, gå med manatwork s kommentar på Zrajms svar. Som dokumentasjonen til awk står det:

 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å gjøre mer avanserte forhold. For eksempel:

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

Dette vil starte utdata på linje 122, og fortsette til en linje inneholdt ordet «foobar».

Hvis du forteller oss selve brukssaken, kan vi kanskje hjelpe med svar som gir en bedre løsning. Jeg er bekymret for at dette høres ut som et XY-problem .

Svar

En annen måte å gjør dette (selv om jeg foretrekker awk -metoden) ved hjelp av coreutils:

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

Svar

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

Her kan vi trekke ut linjene fra 122 til 129 i filen.

$0 brukes til å skrive ut hele fildataene mellom 122 og 129 linjer.

Kommentarer

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *