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
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 li: n avulla >
- @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
- kopioitu vastaus viestiin unix.stackexchange.com/a/89641/72456
sed
-menetelmä, koskased
on niin paljon pienempi (ja latautuu nopeammin) kuinawk
.