İşte bazı "saf" awk
çözümler:
Dizinler her zaman örnek verilerinizde olduğu gibi aynı artan tamsayı dizisi (6115-6119) ise, algoritmik bir "kısayol" kullanabilirsiniz:
awk '{a[$1]=$0} !(NR%4){for(i=6115;i<6119;print a[i++]);}'
Bu yapar
a
Dizine, 6115-6119 dizin konumlarında dağıtılan tüm satırları ekleyin
- Her 4. satırda (
!(NR%4)
), istediğiniz sırada yazdırmak için dizi içerikleri arasında gezinin.
Sayısal dizinleriniz her zaman dört dizinse, ancak artan bir tam sayı dizisi değilse, sıralamanız gerekir:
awk '{a[$1]=$0} !(NR%4){asort(a,b); for(i=1;i<5;print b[i++]);}'
Not: Bu GNU awk ile, diğerleri desteklemeyebilir asort
.
Dört bloktan her biri farklı sayısal kimliklere sahip olabilirse:
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;print a[i++]); delete a}'
Not: @Gilles'ın kendi kendine yanıtından (+2)delete
gelen TIL, bu (henüz) POSIX değil, evrensel olarak desteklenmektedir .
Aşağıdakileri doğru şekilde kullanan bir sürüm delete
:
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;delete a[i++]){print a[i]}}'
Daha fazla bellek ve boyut kullanan, silinmeyen bir sürüm:
awk '{a[n][$1]=$0} !(NR%4){asort(a[n]); for(i=1;i<5;print a[n][i++]); n++}