我有一个2列多行的文件。我想独立地为奇数行和偶数行计算每列的平均值,以便最终我得到一个具有4个值的文件:2列具有奇数和偶数均值的列。 我的文件如下:
2 4
4 4
6 8
3 5
6 9
2 1
最后,我想获得一个文件,第一列的平均值为2,6,6和4,3,2,第二列的平均值为4,8,9和4,5,1列,即:
4.66 7
3 3.33
如果有人可以给我一些建议,我将不胜感激,目前,我只能计算所有行的均值(而不是偶数和奇数)。提前非常感谢您!
答案 0 :(得分:2)
这是一个awk
硬编码示例,但您可以理解这一点:
awk 'NR%2{e1+=$1;e2+=$2;c++;next}
{o1+=$1;o2+=$2;d++}
END{print e1/c"\t"e2/c"\n"o1/d"\t"o2/d}' your_file
4.66667 7
3 3.33333
答案 1 :(得分:1)
Juan Diego Godoy的答案的更广义版本。依靠GNU awk
gawk '
{
parity = NR % 2 == 1 ? "odd" : "even"
for (i=1; i<=NF; i++) {
sum[parity][i] += $i
count[parity][i] += 1
}
}
function result(parity) {
for (i=1; i<=NF; i++)
printf "%g\t", sum[parity][i] / count[parity][i]
print ""
}
END { result("odd"); result("even") }
'
答案 2 :(得分:0)
此答案使用Bash和bc
。假定输入文件仅包含整数,并且行数为偶数。
#!/bin/bash
while read -r oddcol1 oddcol2; read -r evencol1 evencol2
do
(( oddcol1sum += oddcol1 ))
(( oddcol2sum += oddcol2 ))
(( evencol1sum += evencol1 ))
(( evencol2sum += evencol2 ))
(( count++ ))
done < inputfile
cat <<EOF | bc -l
scale=2
print "Odd Column 1 Mean: "; $oddcol1sum / $count
print "Odd Column 2 Mean: "; $oddcol2sum / $count
print "Even Column 1 Mean: "; $evencol1sum / $count
print "Even Column 2 Mean: "; $evencol2sum / $count
EOF
可以对其进行修改以使用数组以使其更加灵活。