2016-03-22 21 views
0

değerlerine karşılık gelen alanları alın. Awk kullanarak satırın maksimum/minimum değerlerini elde etmenin yolları.awk: maksimum değerleri ve

AWK - find min value of each row with arbitrary size

Ancak, ben max/dak değerleri tutmak alanları yazdırarak bir adım daha ileri gitmek gerekir. Örneğin, bir satır için max değeri 100 ve 13 $ 'da bulunur, bu nedenle çıkış 100 ve 13 olmalıdır. Bu awk ötesine mi? örneğin

awk '{max=$1;c=1;for(i=2;i<=NF;i++)if($i>max){c=i;max=$i} printf "max:%s, column:%s\n",max, c}' 

:

+1

Sadece ayrı bir değişken içine alan numarasını kaydetmek ve güncellemek. –

cevap

1

Bu şekilde her yapabileceği yeni bir maksimum değeri bulduğunda

kent$ echo "1 4 3 2 6 5 8"|awk '{max=$1;c=1;for(i=2;i<=NF;i++)if($i>max){c=i;max=$i} printf "max:%s, column:%s\n",max, c}' 
max:8, column:7 
+0

Sanırım, 'END' bölümünün içeriği satır başına yapılmalıdır. Yani, döngü vücut için hemen sonra taşınması gerekiyor. – anishsane

+0

@anishsane evet, haklısınız, thx – Kent

+0

Doğru yaklaşım ancak 2 değişkene ihtiyacınız yok, sadece "c" ve "$ c" (belki "maxc" veya bir şey olarak yeniden adlandırın): awk "{maxc = 1; (c = 2; c <= NF; C++) için ise ($ c> $ maxc) {maxc = c} printf "maks:% s, sütun:% s \ n", $ maxc, maxc} '' –