出力

出力

複数のファイル(> 150)と複数の列(> 150)があります。ほとんどのヘッダーは共通ですが、以下に示すように異なる順序で表示されます。

ファイル1:

Col1 Col2 Col3 Col4 Col5

A    B    C    D    E

ファイル2:

Col1 Col4 Col3 Col5

P    Q    R    S

希望の出力:

Col1 Col3 Col4 Col5

A    C    D    E

P    R    Q    S

または、ほぼ30〜40個のファイルに共通のヘッダーセットがあります(順序はまだ異なります)。ヘッダー(およびそのデータ)がファイルのダミー全体で同じ順序で表示されるようにソートするのに役立つ人がいる場合は、4〜5個のファイルのダミーから非一般的な列を削除して共通列をマージできます。セット。

ベストアンサー1

GNU awkは任意の数のファイルを処理できます(すべてのファイルの内容はメモリに保存されるため、システムのメモリ容量によって異なります)。

gawk '
    # examine the headers for this file
    FNR == 1 {
        num_files++
        delete this_headers
        for (i=1; i<=NF; i++) {
            all_headers[$i]++
            this_headers[i] = $i
        }
        next
    }
    # this is a line of data
    {
        n++
        for (i=1; i<=NF; i++) {
            data[n][this_headers[i]] = $i
        }
    }
    END {
        # find the headers that are common to all files
        for (header in all_headers) {
            if (all_headers[header] == num_files)
                common_headers[header]
        }
        # sort arrays by index, alphabetically
        PROCINFO["sorted_in"] = "@ind_str_asc"
        # print out the common headers
        for (header in common_headers) {
            printf "%s ", header
        }
        print ""
        # print out the data
        for (i=1; i<=n; i++) {
            for (header in common_headers) {
                printf "%s ", data[i][header]
            }
            print ""
        }
    }
' file1 file2

出力

Col1 Col3 Col4 Col5 
A C D E 
P R Q S 

おすすめ記事