Hur kör jag för ett visst antal rader.?

Jag vill extrahera några rader med awk. Är det möjligt att utföra följande uppgift:

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

Hur kan jag visa detaljerna från radnummer 122 till 129?

Kommentarer

  • Om du skulle göra det i en slinga föreslår jag ' d sed metod, eftersom sed är så mycket mindre (och laddas snabbare) än awk.

Svar

Du har inte förstått hur awk fungerar. Det angivna ”programmet” alltid körs en gång för varje rad (eller ”post” i awk-språk) av inmatningen, det finns inget behov av FOR eller någon liknande konstruktion. Använd bara:

verbose method

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

mer kompakt metod

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

Den här ger ett intervall för NR, vilket är ”Number Record”, typiskt detta är den aktuella raden awk bearbetar.

Kommentarer

  • Egentligen den typiska awk kod för en sådan uppgift är vanligtvis ls -l | awk 'NR==122,NR==129'.
  • vad är kommandot för att få de senaste 100 raderna från filen med awk
  • @ShihabudheenKM Titta på det här: stackoverflow.com/questions/12546919/…

Svar

En annan alternativ metod skulle vara att använda sed :

Men, som din fråga antyder, är det viktigt att använda awk för detta, gå med manatworks kommentar på Zrajms svar. Som awks dokumentation säger:

 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å om du vill kan du också göra mer avancerade villkor. Till exempel:

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

Detta skulle starta utdata vid rad 122 och fortsätta tills en rad innehöll ordet ”foobar”.

Om du berättar om det faktiska användningsfallet kan vi kanske hjälpa till med svar som ger en bättre lösning. Jag är orolig för att det låter som ett XY-problem .

Svar

Ett annat sätt att gör detta (även om jag föredrar awk -metoden) med coreutils:

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

Svar

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

Här kan vi extrahera raderna från 122 till 129 i filen.

$0 används för att skriva ut hela fildata mellan 122 och 129 rader.

Kommentarer

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *