Basit awk çözümler:
Eşleşen satırları bulmak için kullanılacak normal ifadenin kabuk değişkeninde $regexve atlanacak satır sayısında depolandığını varsayın $count.
Eğer uygun hattı gerekir da atlanır ( $count + 1hat atlanır):
... | awk -v regex="$regex" -v count="$count" \
'$0 ~ regex { skip=count; next } --skip >= 0 { next } 1'
Eğer eşleşen bir satır olmalıdır değil atlanır ( $countçizgiler sonra maçın atlanır):
... | awk -v regex="$regex" -v count="$count" \
'$0 ~ regex { skip=count; print; next } --skip >= 0 { next } 1'
Açıklama:
-v regex="$regex" -v count="$count"awkDeğişkenleri aynı isimli kabuk değişkenlerine göre tanımlar .
$0 ~ regex ilgi alanıyla eşleşir
{ skip=count; next }atlama sayısını başlatır ve bir sonraki satıra geçerek eşleştirme satırını etkin bir şekilde atlar; 2 çözümde, printdaha önce nextolmasını sağlar o olduğunu değil atlanır.
--skip >= 0 atlama sayısını azaltır ve eğer (hala)> = 0 ise, eldeki satırın atlanması gerektiği anlamına gelir.
{ next } etkin bir şekilde geçerli satırı atlayarak sonraki satıra geçer
1için yaygın olarak kullanılan bir kısaltmadır { print }; yani mevcut satır basitçe yazdırılır
- Bu komuta yalnızca eşleşmeyen ve atlanmayan satırlar ulaşır.
- Nedeni
1eşdeğerdir { print }yani 1tanım gereği her zaman (blok) ilişkili işlem koşulsuz olarak yürütülür, bu vasıtalar, doğru olarak değerlendirilir bir Boolean model yorumlanır. Yana orada olduğu hiçbir bu durumda ilişkili eylem, awkvarsayılan baskı hattı.
+Nbir GNU uzantısı olduğuna dikkat edin . Desenli çizgiyi içermesini sağlamak için ikinci örneğinizde ilkini birnile değiştirinN.