我有一个以下格式的文件:
run-225-1 178.165 178.165 117.025
run-84-7 178.308 178.308 117.028
run-247-2 178.750 178.750 117.110
run-7-7 178.760 178.760 117.117
run-110-5 177.644 177.644 117.121
run-5-5 179.173 179.173 117.121
run-56-7 179.220 179.220 117.131
run-78-1 178.176 178.176 117.167
我用awk来计算每个数值列的平均值和标准差。
然后,我使用IF语句比较标准偏差,以确定哪个列包含最差数据:
if [[ $ASTD > $BSTD ]]; then
top=$ASTD
else
top=$BSTD
fi
if [[ $top > $CSTD ]]; then
BAD=$top
else
BAD=$CSTD
fi
echo $BAD
我现在要做的是从列中每个元素中减去具有最差标准差($ BAD)的平均值(使用awk),然后将减法结果作为新列附加。
有什么建议吗?
答案 0 :(得分:1)
这可能不是最好的方法,但我首先要弄清楚哪一列会返回最差的"最差的"标准差,
if [[ $ASTD > $BSTD ]]; then
top=$ASTD
col=1
else
top=$BSTD
col=2
fi
if [[ $top > $CSTD ]]; then
BAD=$top
else
BAD=$CSTD
col=3
fi
然后将col参数传递给awk
awk -v col=$col bad=$BAD '{print $0, $(col) - bad}' <infile>
您可能需要使用$(col)
中的间接答案 1 :(得分:0)
埃斯!
这是我所拥有的;
根据具有最高标准偏差的A B或C,根据均值对cell.txt进行排序如果[[$ ASTD&gt; $ BSTD]];然后
top=$ASTD
col=2
mean=$AMEAN
否则
顶部= $ BSTD
山口= 3
平均= $ BMEAN
网络
如果[[$ top&gt; $ CSTD]];然后
BAD=$top
否则 BAD = $ CSTD 山口= 4 平均= $ CMEAN 网络
回声最差维度是$ col echo mean是$ mean
awk -v column = $ {col} -v mean = $ {mean}&#39; {$ 5 = $(column) - mean;打印}&#39; cell.txt&gt;&gt; tmp.txt
sort -k5 -n tmp.txt&gt; sorted.txt
rm tmp.txt
如果有人有更优雅的解决方案,请告诉我们!