使用awk“平均”2个数据文件

时间:2017-01-10 11:14:06

标签: bash awk

假设我有2个数据文件dat1.txt

1 1
2 2

和dat2.txt

2 2
3 3

如何使用awk“平均”这些文件并将其保存到新文件中? 所以在这种情况下我想输出一个文件dat3.txt:

1.5 1.5
2.5 2.5

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
}