複数のファイル(> 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