पर्ल
यह कोड सभी स्तंभों की घटनाओं की गणना करता है , और उनमें से प्रत्येक के लिए एक सॉर्ट की गई रिपोर्ट प्रिंट करता है:
# columnvalues.pl
while (<>) {
@Fields = split /\s+/;
for $i ( 0 .. $#Fields ) {
$result[$i]{$Fields[$i]}++
};
}
for $j ( 0 .. $#result ) {
print "column $j:\n";
@values = keys %{$result[$j]};
@sorted = sort { $result[$j]{$b} <=> $result[$j]{$a} || $a cmp $b } @values;
for $k ( @sorted ) {
print " $k $result[$j]{$k}\n"
}
}
स्तंभ के रूप में पाठ को सहेजें।
इसे इस रूप में चलाएँ: perl columnvalues.pl files*
व्याख्या
लूप करते समय शीर्ष स्तर में:
* संयुक्त इनपुट फ़ाइलों की प्रत्येक पंक्ति पर लूप करें
* लाइन को @ फ़ील्ड्स सरणी में विभाजित करें
* प्रत्येक स्तंभ के लिए, परिणाम सरणी-हैश डेटा संरचना बढ़ाएँ।
लूप के लिए शीर्ष-स्तर में:
* परिणाम सरणी पर लूप
करें * कॉलम नंबर प्रिंट करें
* उस कॉलम में उपयोग किए गए मान प्राप्त
करें * मूल्यों की संख्या के
आधार पर मानों को छाँटें * मूल्य के आधार पर माध्यमिक प्रकार (उदाहरण के लिए बनाम बनाम जी बनाम। m बनाम z)
* क्रमबद्ध सूची का उपयोग करते हुए, परिणाम हैश के माध्यम से Iterate
* प्रत्येक घटना के मूल्य और संख्या को प्रिंट करें
@ डेनिस द्वारा प्रदान की गई नमूना इनपुट फ़ाइलों के आधार पर परिणाम
column 0:
a 3
z 3
t 1
v 1
w 1
column 1:
d 3
r 2
b 1
g 1
m 1
z 1
column 2:
c 4
a 3
e 2
.csv इनपुट
यदि आपकी इनपुट फाइलें .csv हैं, तो बदल /\s+/
दें/,/
कहानियो
एक बदसूरत प्रतियोगिता में, पर्ल विशेष रूप से अच्छी तरह से सुसज्जित है।
यह एक-लाइनर ऐसा ही करता है:
perl -lane 'for $i (0..$#F){$g[$i]{$F[$i]}++};END{for $j (0..$#g){print "$j:";for $k (sort{$g[$j]{$b}<=>$g[$j]{$a}||$a cmp $b} keys %{$g[$j]}){print " $k $g[$j]{$k}"}}}' files*