Kuinka ajaa awk joillekin linjoille.?

Haluan purkaa joitain rivejä awk. Voinko tehdä seuraavan tehtävän:

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

Kuinka voin näyttää yksityiskohdat rivinumeroista 122 – 129?

Kommentit

  • Jos tekisit tämän silmukassa, ehdotan ' d ehdotusta sed -menetelmä, koska sed on niin paljon pienempi (ja latautuu nopeammin) kuin awk.

Vastaus

Et ole ymmärtänyt, miten awk toimii. Määritetty ”ohjelma” suoritetaan aina kerran jokaiselle syötteen riville (tai ”ennätys” awk-kielellä), ei tarvita FOR tai mitä tahansa vastaavaa rakennetta. Käytä vain:

verbose method

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

kompaktimpi menetelmä

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

Tämä antaa alueen alueelle NR, joka on ”Numerotietue”, tyypillisesti tämä on nykyinen rivi awk käsittelee.

Kommentit

  • Itse asiassa tyypillinen awk koodi tällaiselle tehtävälle on yleensä ls -l | awk 'NR==122,NR==129'.
  • mikä on komento saada viimeinen 100 rivi tiedostosta awk
  • @ShihabudheenKM Voi tarkastella tätä: stackoverflow.com/questions/12546919/…

vastaus

Vielä yksi vaihtoehtoinen menetelmä olisi käyttää sed :

Mutta jos, kuten kysymyksesi ehdottaa, on tärkeää käyttää awk: tä, mene käsikirjoituksen kommentin Zrajmin vastaukseen. Kuten awk: n dokumentaatiossa todetaan:

 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. 

Joten jos haluat, voit myös luoda edistyneempiä ehtoja. Esimerkiksi:

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

Tämä aloittaisi tuloksen riviltä 122 ja jatkuisi, kunnes rivi sisälsi sana ”foobar”.

Jos kerrot meille todellisen käyttötapauksen, voimme ehkä auttaa vastauksilla, jotka tarjoavat paremman ratkaisun. Olen huolissani siitä, että tämä kuulostaa XY-ongelma .

Vastaa

Toinen tapa näin (vaikka mieluummin pidän awk -menetelmää) käyttäen coreutils:

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

Vastaa

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

Täällä voimme purkaa rivit tiedoston 122 – 129 välillä.

$0 -tulostusta käytetään koko tiedostotiedon tulostamiseen 122–129 rivin välillä.

kommentit

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *