2017-01-10 5 views
1

は、私は2つのデータファイルが'平均' 2つのデータファイルへのawkを使用して

1 1 
2 2 

そしてdat2.txt

2 2 
3 3 

どのように私はこれらのファイルは、 "平均的" にawkを使用することができますがdat1.txt持っていると言いますこれを新しいファイルに保存しますか? だからこのケースでは、私は、ファイルdat3.txtの出力たい:

1.5 1.5 
2.5 2.5 

答えて

2

awk '{n=NF/2;for(i=1;i<=n;i++) 
     printf "%.1f%s",($i+$(n+i))/2,i==n?RS:FS}' <(paste f1 f2) 
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 

をこのコードは、多くの順列と組み合わせでテストされていません。だからあなたはもっと条件があり、親切に私たちに同じことを教えてください。

+1

を_Iのようなテキストこれが助けてくれることを願っています_そして、もしあなたがこの投稿に役立つものであれば、私に知らせてください。コンテンツ自体に固執し、詳細を説明して投稿をより見栄え良くしてください。 – fedorqui

+1

お詫び@fedorqui、私はコードと説明を与えることを試みる、ありがとう。 – RavinderSingh13

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 

出力

0のように入力ファイル両方のファイルを想定し
1.500000 1.500000 
2.500000 2.500000 
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 

はワンライナーは動作するはずです。このAWKの行数が同じで、引数

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 
} 
関連する問題