मेरे पास यह डेटा यहां है:

Name,Team,First Test, Second Test, Third Test
Tom,Red,5,17,22
Joe,Green,3,14,22
Maria,Blue,6,18,21
Fred,Blue,2,15,23
Carlos,Red,-1,15,24
Phuong,Green,7,19,21
Enrique,Green,3,16,20
Nancy,Red,9,12,24

जब मैं पहले टेस्ट का औसत निकाल रहा हूं, तो मैं पंक्ति 6 ​​में फ़ील्ड 3 ($3) को छोड़ना चाहूंगा क्योंकि यह नकारात्मक है।

मैं उस विशेष मूल्य को कैसे छोड़ूं और सभी फ़ील्ड अभी भी पहले कॉलम में जोड़ूं?

मुझे पता है कि अगला आदेश पूरी पंक्ति पर छोड़ देता है, क्या कोई ऐसा आदेश है जो किसी विशेष फ़ील्ड को छोड़ देगा?

धन्यवाद।

संपादित करें

माफ़ करना। यहां बताया गया है कि आउटपुट कैसा दिखना चाहिए, मेरे पास पहले से ही परीक्षण दो और तीन का औसत है, बस परीक्षण के लिए औसत के साथ मदद चाहिए।

Average for Test 1: 5
Average for Test 2: 15.75
Average for Test 3: 22.125
---------------------------------
0
jshakil 19 अक्टूबर 2017, 21:05

2 जवाब

सबसे बढ़िया उत्तर

awk बचाव के लिए!

$ awk -F, 'NR>1 {for(i=3;i<=NF;i++) if($i>=0) {s[i]+=$i; c[i]++}} 
           END  {for(i=3;i<=NF;i++) print "Average for Test " (i-2) ": " s[i]/c[i]}' file

Average for Test 1: 5
Average for Test 2: 15.75
Average for Test 3: 22.125

मान लें कि गैर-ऋणात्मक मान के साथ कम से कम एक रिकॉर्ड है, यदि c[i]>0 के साथ प्रिंट की रक्षा नहीं करते हैं

1
karakfa 19 अक्टूबर 2017, 21:16

संपादित करें: जैसा कि ओपी ने कहा था कि उसे अब उस समाधान को प्रदान करने के लिए क्षेत्रों में नकारात्मक मूल्यों को नकारने की जरूरत है।

awk -F, 'FNR==1{print;next} {for(i=1;i<=NF;i++){printf("%s%s",$i<0?"":$i,i==NF?RS:",")}}'   Input_file

आउटपुट निम्नानुसार होगा।

Name,Team,First Test, Second Test, Third Test
Tom,Red,5,17,22
Joe,Green,3,14,22
Maria,Blue,6,18,21
Fred,Blue,2,15,23
Carlos,Red,,15,24
Phuong,Green,7,19,21
Enrique,Green,3,16,20
Nancy,Red,9,12,24
1
RavinderSingh13 19 अक्टूबर 2017, 21:16