Awk ile bir dizi silme


18

Awk içinde, bir döngü ile bir diziyi temizleyebilir, onu silmeye eşdeğer boş bir dizi haline getirebilirim.

for (key in array) delete array[key];

Daha basit bir yol var mı? Değişken adının bir skaler için yeniden kullanılabilmesi için bir diziyi tamamen silebilir miyim?

Yanıtlar:


29

Sözdizimi

delete array

POSIX'teki mevcut sürümlerde değil, ancak neredeyse tüm mevcut uygulamalar tarafından desteklenmektedir (orijinal awk, GNU, mawk ve BusyBox dahil). POSIX'in gelecekteki bir sürümüne eklenecektir (bkz . Hata 0000544 ).

Hem taşınabilir hem de standart uyumlu ve bir ifade yerine bir ifade olan tüm dizi öğelerini temizlemenin alternatif bir yolu, splitmevcut tüm öğeleri silmeye güvenmektir :

split("", array, ":")

Bunların tümü de dahil olmak üzere delete array, değişkenin orijinal awk, GNU awk ve mawk (ancak BusyBox awk içinde değil) içinde bir dizi değişkeni olarak işaretlenmiş bırakın. Bildiğim kadarıyla, bir değişken bir dizi olarak kullanıldığında, onu skaler değişken olarak kullanmanın bir yolu yoktur.


Alternatif bölünmüş çözüm yardımcı oldu. SCO Openserver 5.0.7 awk delete array, sözdizimi hatasını çağırdığında , man sayfasının altyazının isteğe bağlı olduğunu söylediğini bulmak sürpriz oldu . Bir hata olarak gösterilmese de, aynı zamanda işe yaramadığını ve birçok varyantın eşit derecede etkisiz $ awk 'BEGIN { A[1] = 0; delete A; }' awk: Syntax error at line 1 of program << BEGIN { A[1] = 0; de ... >> context is BEGIN { A[1] = 0; delete >>> A; <<< awk: illegal statement at line 1 of program << BEGIN { A[1] = 0; de ... >>olduğunu bulmak daha şaşırtıcıydı . delete array[subscript]array[subscript] = ""
kbulgrien

1
Veya sadecesplit("", array)
ryenus
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.