簡體   English   中英

AWK(或其他方式)來自多個文件的多個列的平均值

[英]AWK (or something else) Average of multiple columns from multiple files

我希望能對awk腳本有幫助,也可以做任何工作。

因此,我有多個文件(行和列的數量相同),我想對所有文件中的每一列(第一列除外)的每個數字取平均值。 我不知道一個文件中有多少列(盡管如果需要,我可能可以得到數字)。

文件名1

1 1 2 3 4
2 3 4 5 6
3 2 3 5 6

文件名.2

1 3 4 6 6
2 5 6 7 8
3 4 5 7 8

輸出

1 2 3 5 5
2 4 5 6 7
3 3 4 6 7

我在這里的某個地方找到了它,它可以對單個列進行處理(據我所知)

awk '{a[FNR]+=$2;b[FNR]++;}END{for(i=1;i<=FNR;i++)print i,a[i]/b[i];}' fort.*

那么唯一的嗎? 更改將用所有列上的循環替換+ = $ 2嗎? 有沒有一種方法可以不知道確切的列數?

謝謝。

$ cat tst.awk
{
    key[FNR] = $1
    for (colNr=2; colNr<=NF; colNr++) {
        sum[FNR,colNr] += $colNr
    }
}
END {
    for (rowNr=1; rowNr<=FNR; rowNr++) {
        printf "%s%s", key[rowNr], OFS
        for (colNr=2; colNr<=NF; colNr++) {
            printf "%s%s", int(sum[rowNr,colNr]/ARGIND+0.5), (colNr<NF ? OFS : ORS)
        }
    }
}

$ awk -f tst.awk file1 file2
1 2 3 5 5
2 4 5 6 7
3 3 4 6 7

上面的代碼將GNU awk用於ARGIND,而其他awks只是在開始添加一行FNR==1{ARGIND++}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM