Hoe kan ik een aantal regels awk uitvoeren?

Ik wil enkele regels extraheren met awk. Is het mogelijk om de volgende taak uit te voeren:

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

Hoe kan ik de details van regelnummers 122 tot 129 weergeven?

Opmerkingen

  • Als je dit in een lus zou doen, zou ik ' de sed methode, aangezien sed zoveel kleiner is (en sneller laadt) dan awk.

Answer

Je hebt niet begrepen hoe awk werkt. Het opgegeven “programma” wordt altijd één keer uitgevoerd voor elke regel (of “record” in awk-taalgebruik) invoer, FOR is niet nodig of een vergelijkbare constructie. Gebruik gewoon:

uitgebreide methode

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

compactere methode

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

Deze geeft een bereik voor NR, wat de “Number Record” is, meestal dit is de huidige regel die awk aan het verwerken is.

Reacties

  • Eigenlijk de typische awk code voor zon taak is meestal ls -l | awk 'NR==122,NR==129'.
  • wat is het commando om de laatste 100 regels uit het bestand te halen met awk
  • @ShihabudheenKM Bekijk dit misschien eens: stackoverflow.com/questions/12546919/…

Answer

Een andere alternatieve methode zou zijn om sed te gebruiken :

Maar als, zoals je vraag suggereert, het belangrijk is om awk hiervoor te gebruiken, ga dan met de opmerking van manatwork over het antwoord van Zrajm. Zoals in de awk-documentatie staat:

 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. 

Dus als je wilt, kun je ook meer geavanceerde voorwaarden maken. Bijvoorbeeld:

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

Dit zou de uitvoer beginnen op regel 122, en doorgaan tot een regel de woord “foobar”.

Als u ons de daadwerkelijke use case vertelt, kunnen we u misschien helpen met antwoorden die een betere oplossing bieden. Ik ben bang dat dit klinkt als een XY-probleem .

Antwoord

Een andere manier om dit te doen (hoewel ik de voorkeur geef aan de awk -methode) met coreutils:

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

Antwoord

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

Hier kunnen we de regels extraheren van 122 tot 129 van het bestand.

$0 wordt gebruikt om de volledige bestandsgegevens tussen 122 en 129 regels af te drukken.

Reacties

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *