Есть 2 файла: File1 и File2
File1 имеет только заголовки, такие как
Field2 Field1 Field3
и
Файл2 также имеет заголовки и данные, например
Поле3 Поле2 Поле1
ABC DEF GHI
JKL MNO PQRS
Мне нужно синхронизировать 2 поля заголовков в таких файлах, как
File1.txt
Field1 Field2 Field3
File2.txt
Field1 Field2 Field3
GHI DEF ABC
PQRS MNO JKL
Используйте awk
, чтобы разделить файл2 на несколько соответствующих файлов по значению заголовка, а затем вставьте их вместе в желаемом порядке, сохраненном в файле1 только как заголовок.
awk 'BEGIN{getline;h1=$1;h2=$2;h3=$3}
{print $1>h1; print $2>h2; print $3>h3}
' file2
Затем выполните paste
из заголовка файла1.
paste `cat file1`
DEF GHI ABC
MNO PQRS JKL
если вы хотите вставить в порядке заголовков (, не основанном на порядке заголовков в файле 1 ), вы можете сделать следующее.
paste Field{1..3}
GHI DEF ABC
PQRS MNO JKL
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
, чтобы сделать его красивым.