Shell-Script
奇偶線的偶數和奇數之和
我想編寫一個 shell 腳本程序,它給出給定文件的奇數行和偶數行中偶數和奇數的總和。
我想使用:
sed -n 2~2p
和
sed -n 1~2p
但我什至不確定從哪里以及如何開始解決它。你能指導我正確的方向嗎?
輸入文件範例:
20 15 14 17 20 50 79 77 55 40 89 77 45 65 87 12
輸出範例:
Odd summ: 15+17+55+89+77=253(Enough just the end of the summ) Even summ: 20+50+12=82(Enough just the end of the summ)
使用米勒(https://github.com/johnkerl/miller)並執行
mlr --n2c put 'for (key, value in $*) { if ((value % 2 ==0) && (NR % 2 ==0)) { $even +=value; } elif ((value % 2 !=0) && (NR % 2 !=0)) { $odd +=value; } } ' then unsparsify then stats1 -a sum -f odd,even input.csv
你將會有
odd_sum,even_sum 253,82
與
perl
:perl -lne '$odd = $. & 1; $sum[$odd] += $_ for grep {($_ & 1) == $odd} /\d+/g; END { print "Sum of odd numbers on odd lines: " . (0+$sum[1]); print "Sum of even numbers on even lines: " . (0+$sum[0]); }' < file
(此處僅考慮輸入中的十進制數字序列,如果您還想考慮負數或十六進制、八進制數,則可能需要進行調整…)
在您的範例輸入中,它給出:
Sum of odd numbers on odd lines: 253 Sum of even numbers on even lines: 82
對於您的全部預期輸出:
perl -MList::Util=sum -lne ' $odd = $. & 1; push @{$l[$odd]}, grep {($_ & 1) == $odd} /\d+/g; END { $" = "+"; print "Odd sum: @{$l[1]}=" . sum(@{$l[1]}); print "Even sum: @{$l[0]}=" . sum(@{$l[0]}); }' < file
請注意,您的
sed -n 2~2p
和sed -n 1~2p
是 GNU 擴展。標準等價物分別為:sed 'n;d'
和sed '1d;n;d'
。