File1とFile2という2つのファイルがあります。
File1にはヘッダーのみがあります。
Field2 Field1 Field3
そして
File2にはヘッダーとデータもあります。
Field3 Field2 Field1 ABC DEF GHI JKL MNO PQRS
次のファイルで2つのヘッダーフィールドを同期する必要があります。
ファイル1.txt
Field1 Field2 Field3
ファイル2.txt
Field1 Field2 Field3
GHI DEF ABC
PQRS MNO JKL
答え1
awk '
NR==FNR {
# read the first file, save the desired field order
n = split($0, field_order)
next
}
FNR==1 {
# read the first line of the second file
# store the mapping of field name to existing column number
n = split($0, header)
for (i=1; i<=n; i++)
current_field_order[header[i]] = i
}
{
# output the fields in the desired order
for (i=1; i<=n; i++)
printf "%s%s", $(current_field_order[field_order[i]]), OFS
print ""
}
' file1 file2
これにより、列の並べ替えが中断されます。出力をパイプしてきれいに| column -t
することができます。
答え2
awk
file2を各ヘッダー値に対応する複数のファイルに分割し、file1にのみヘッダーとして保存されている任意の順序で一緒に貼り付けるために使用されます。
awk 'BEGIN{getline;h1=$1;h2=$2;h3=$3}
{print $1>h1; print $2>h2; print $3>h3}
' file2
それからpaste
file1の先頭から始めます。
paste `cat file1`
DEF GHI ABC
MNO PQRS JKL
file1のヘッダー順序ではなくヘッダー順序で貼り付けるには、次のようにします。
paste Field{1..3}
GHI DEF ABC
PQRS MNO JKL