Büyük bir tablonun her alanında bulunan eleman/kelime sayısını saymaya çalışıyorum. Alanlar, whitspaces ve alan elemanları ("kelimeler") virgüllerle ayrılır. Tabloda ayrıca 0 öğesine eşdeğer olan boş alanlar (örneğin iki veya daha fazla ardışık beyaz boşluk) bulunur.awk alanındaki her alandaki değerlerin sayısı, çıktı tablosu
val1 3 3 0 1
val2 0 2 1 1
val3 0 0 0 2
(I birinci sütundaki istiyorum)
:val1 this,is,text this,more,text stop
val2 this,is a field
val3 end,text
Bu, istenen çıkış olacaktır: Tablodan bu gibi örneğin
,
Lütfen ilk satırdaki stop
değerinden iki boş alan olduğunu ve dördüncü alanın 0 öğesine sahip olduğunu unutmayın. Diğer hatlarda da benzer şeyler olur.
Her alan için elemanların arzu edilen sayıda bir dizi oluşturmak için awk'ın ayırma işlevi kullanıyorum:
awk '{ for(i = 2; i <= NF; i++) {
$i=split($i,a,",") ; { if (!$i) { $i="0" }};
}; print $0}' input
I a
n
bir dizi eleman her bir alan i
bölme ediyorum ve bu değeri $i
değişkenine atamak. Verilen alanda 0 eleman durumunda, (!$i
), $i=0
. Gördüğünüz gibi, 0 değerleri
val1 3 3 1
val2 2 1 1
val3 2
atlanmıştır:
Ama bu benim şimdiki istenmeyen çıkıştır. Boş alanlara 0 değerinin atanmasıyla ilgili bir sorun olduğunu düşünüyorum.
Bana yardım eden var mı? Şimdiden çok teşekkürler!
Ah canım. Çok basit. Çok teşekkürler! – XGrau