假设我有2个数据文件dat1.txt
1 1
2 2
和dat2.txt
2 2
3 3
如何使用awk“平均”这些文件并将其保存到新文件中? 所以在这种情况下我想输出一个文件dat3.txt:
1.5 1.5
2.5 2.5
答案 0 :(得分:2)
这个awk单行应该可以工作:
awk '{n=NF/2;for(i=1;i<=n;i++)
printf "%.1f%s",($i+$(n+i))/2,i==n?RS:FS}' <(paste f1 f2)
答案 1 :(得分:0)
尝试一下:
awk 'FNR==NR{for(i=1;i<=NF;i++){A[FNR,i]=$i};next} {for(j=1;j<=NF;j++){printf("%.2f ",(A[FNR,j]+$j)/2)};print x}' data1.txt data2.txt
此代码未经过多种排列和组合测试。所以,如果你有更多的条件,请在同一时间告诉我们。
答案 2 :(得分:0)
尝试,这也支持两个以上的文件,您可以输入myfiles*.txt
<强>输入强>
$ cat f1.txt
1 1
2 2
$ cat f2.txt
2 2
3 3
脚本
awk '
FNR==1{
nf++
nc = NF
}
{
for (i=1; i <= NF; i++)
s[FNR,i] += $i;
if (FNR > mnr) mnr = FNR
}
END {
for (i = 1; i <= mnr; i++)
{
for (c=1; c <= nc; c++)
printf("%s%f", (c>1?OFS:""), s[i,c]/nf);
printf "\n"
}
}
' f1.txt f2.txt # you can also input f*.txt
<强>输出强>
1.500000 1.500000
2.500000 2.500000
答案 3 :(得分:0)
awk '{for(i=1;i<=NF;i++)Sum[FNR"-"i]+=$i}
END {
for(l=1;l<=NR;l++){
for(i=1;i<=NF;i++) printf( "%2.1f ", Sum[l"-"i]/NR)
printf( "\n")
}
}' dat.1 dat.2
假设两个文件具有相同数量的行和参数
答案 4 :(得分:0)
$ awk '{a[FNR]+=$1; b[FNR]+=$2}END{for(;++i<=FNR;) print a[i]/(ARGC-1), b[i]/(ARGC-1)}' f1 f2
1.5 1.5
2.5 2.5
说明:
{
a[FNR]+=$1 # sum col values into arrays
b[FNR]+=$2 # array for each field
}
END {
for(;++i<=FNR;) # iterate arrays in ascending order
print a[i]/(ARGC-1), b[i]/(ARGC-1) # and print array contents divided by filecount
}