![我们有 2 个带有混乱标头的文件](https://linux22.com/image/115927/%E6%88%91%E4%BB%AC%E6%9C%89%202%20%E4%B8%AA%E5%B8%A6%E6%9C%89%E6%B7%B7%E4%B9%B1%E6%A0%87%E5%A4%B4%E7%9A%84%E6%96%87%E4%BB%B6.png)
有 2 个文件,即 File1 和 File2
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