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
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 vanligvisls -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
- duplisert svar fra unix.stackexchange.com/a/89641/72456
sed
metode, sidensed
er så mye mindre (og lastes raskere) ennawk
.