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?
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?
Yanıtlar:
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.
awkböyle bir görev için tipik kod genellikle ls -l | awk 'NR==122,NR==129'.
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 .
awk 'NR == 122,NR == 129{print $0}' file
Burada 122'den 129'a kadar olan dosyaları ayıklayabiliriz.
$0 122 ve 129 satır arasındaki tüm dosya verilerini yazdırmak için kullanılır.
sedyöntemisedçok daha küçük (ve daha hızlı yükler) olduğu için öneririmawk.