AWK を使用して、指定されていない数のファイルの組み合わせの出力を印刷します。

AWK を使用して、指定されていない数のファイルの組み合わせの出力を印刷します。

私の目標は、サブディレクトリに移動してSUBと呼ぶことです。これには、それぞれ5つの列があり、常に同じ数の行を持つ多くのテキストファイルがあります。 2-5のすべての列を合計し、最初の列を保持してからファイルを出力する大きな「合計」ファイルが必要です。ファイル数が少ないことがわかっている場合は、次のようにできます。

cd SUB

numfiles=(*)
numfiles=${#numfiles[@]}

if [ $numfiles = 1 ]
then
paste * | awk '{print $1, $2, $3, $4, $5}' > sum
fi

if [ $numfiles = 2 ]
then
paste * | awk '{print $1, ($2+$7), ($3+$8), ($4+$9), ($5+$10)}' > sum
fi    

しかし、SUBのファイル数は1から100までである可能性があるため、これは面倒なアプローチです。ご協力ありがとうございます!

PS新しい「sum」ファイルは入力テキストファイルと同じ形式でなければならず、すべて同じように見えます。たとえば、SUBに項目を含む2つのファイルが含まれている場合

1 2 3 4 5
2 2 3 4 5

そして

1 4 2 7 1
2 2 5 1 9

その後、「sum」ファイルは次のようになります。

1 6 5 11 6
2 4 8 5 14

ベストアンサー1

awk '
    NR==FNR {
        # assuming column 1 is the same for all files, remember it.
        # only need to do this for the first file
        col1[FNR] = $1
    }
    { for (i=2; i<=NF; i++) sum[FNR,i] += $i }
    END {
        for (i=1; i<=FNR; i++) {
            printf "%s", col1[i]
            for (j=2; j<=NF; j++) printf "%s%s", OFS, sum[i,j]
            print ""
        }
    }
' file1 file2
1 6 5 11 6
2 4 8 5 14

nawk、gawk、およびmawkで作業する必要があります。

おすすめ記事