如何使用awk将其平均值减去每列?
我有一个如下文件(但有数千行和数百列) 如何使用awk将其平均值减去每列/字段,以获得这样的结果如何使用awk将其平均值减去每列?,awk,mean,Awk,Mean,我有一个如下文件(但有数千行和数百列) 如何使用awk将其平均值减去每列/字段,以获得这样的结果 -1 0 -2 -1 0 -1 1 0 0 1 0 3 非常感谢你的帮助 最接近的解决方案似乎无法“逐个元素”完成任务。当然,它会执行另一个操作,但通用概念是“使用在该列上计算的值在每列上执行一个操作”,使用awk分两次执行: awk ' NR==FNR { for (i=1;i<=NF;i++) { a[i]+=$i } next } {
-1 0 -2
-1 0 -1
1 0 0
1 0 3
非常感谢你的帮助
最接近的解决方案似乎无法“逐个元素”完成任务。当然,它会执行另一个操作,但通用概念是“使用在该列上计算的值在每列上执行一个操作”,使用
awk
分两次执行:
awk '
NR==FNR {
for (i=1;i<=NF;i++) {
a[i]+=$i
}
next
}
{
for (y=1;y<=NF;y++) {
printf "%2d ", $y-=(a[y]/(NR-FNR))
}
print ""
}' file file
两次通过
awk
:
awk '
NR==FNR {
for (i=1;i<=NF;i++) {
a[i]+=$i
}
next
}
{
for (y=1;y<=NF;y++) {
printf "%2d ", $y-=(a[y]/(NR-FNR))
}
print ""
}' file file
用法:python script.py inputFile
用法:python script.py inputFile感谢您的快速回答。是否有一种方法可以在“NF”列上自动执行此操作?@leonardvertighel将此解决方案更新为通用解决方案。非常感谢!我花了一分钟的时间来弄清楚为什么同一个输入文件有两次,为什么我有很多零:这是出于我的需要将格式“%2d”更改为“%2f”。@leonardvertighel创建两个输入文件的原因是因为我们分两次执行此操作。在第一次过程中,我们将捕获每列的总数,然后在第二次过程中,我们将从每列值中减去平均值。是的,这就是printf的妙处。您可以自定义输出的格式。:)@leonardvertighel我添加了一个替代解决方案,可以在一个过程中完成同样的操作。感谢您的快速回答。是否有一种方法可以在“NF”列上自动执行此操作?@leonardvertighel将此解决方案更新为通用解决方案。非常感谢!我花了一分钟的时间来弄清楚为什么同一个输入文件有两次,为什么我有很多零:这是出于我的需要将格式“%2d”更改为“%2f”。@leonardvertighel创建两个输入文件的原因是因为我们分两次执行此操作。在第一次过程中,我们将捕获每列的总数,然后在第二次过程中,我们将从每列值中减去平均值。是的,这就是printf的妙处。您可以自定义输出的格式。:)@leonardvertighel我添加了一个替代解决方案,可以在一个过程中完成同样的操作。
awk '{
for (i=1;i<=NF;i++) {
a[i]+=$i;
b[NR,i]=$i
}
}
END {
for (i=1;i<=NR;i++) {
for (j=1;j<=NF;j++) {
printf "%2d ",b[i,j]-=(a[j]/NR)
}
print ""
}
}' file
import sys, numpy as np
a = np.array([i.strip().split() for i in open(sys.argv[1])],dtype =float)
for i in a - np.mean(a,axis=0): print ' '.join(map(str, i))