Bazı hatlar için awk nasıl çalıştırılır.?


18

Bazı satırları çıkarmak istiyorum awk. Aşağıdaki görevi yapmak mümkün müdür:

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

122 ile 129 arasındaki satır numaralarından ayrıntıları nasıl görüntüleyebilirim?


Bunu bir döngüde yapacak olsaydınız, sedyöntemi sedçok daha küçük (ve daha hızlı yükler) olduğu için öneririm awk.
zrajm

Yanıtlar:


36

Nasıl awkçalıştığını anlamadınız . Belirtilen "program" her girdi satırı (veya awk parlance'de "kayıt") için her zaman bir kez yürütülür, buna FORbenzer bir yapıya gerek yoktur . Sadece kullan:

ayrıntılı yöntem

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

daha kompakt yöntem

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

Biri için bir aralık verir NR, yani "Sayı Kaydı", tipik olarak bu geçerli satır awkişlemektedir.


6
Aslında awkböyle bir görev için tipik kod genellikle ls -l | awk 'NR==122,NR==129'.
manatwork

awk kullanarak dosyadan son 100 satırını almak için komut nedir
Shihabudheen KM

@ShihabudheenKM Şuna bir göz
atabilir

8

Alternatif bir yöntem daha kullanmak olacaktır sed:

ls -l | sed -ne '122,129p'

Ancak, sorunuzun da belirttiği gibi, bunun için awk kullanmak önemlidir, manatwork'ün Zrajm'ın cevabı hakkındaki yorumuyla devam edin. Awk belgelerinde belirtildiği gibi:

   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.

Yani isterseniz daha gelişmiş koşullar da yapabilirsiniz. Örneğin:

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

Bu, çıktıyı 122. satırda başlatacak ve bir çizgi "foobar" kelimesini içerene kadar devam edecektir.

Bize gerçek kullanım durumunu söylerseniz , daha iyi bir çözüm sağlayan cevaplara yardımcı olabiliriz. Bunun bir XY sorunu gibi göründüğünden endişeleniyorum .


2

awkCoreutils kullanarak ( yöntemi tercih rağmen) bunu yapmanın başka bir yolu :

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.