у нас есть 2 файла с беспорядочными заголовками

Есть 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
0
10.08.2017, 19:16
2 ответа

Используйте 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
0
28.01.2020, 04:41
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, чтобы сделать его красивым.

0
28.01.2020, 04:41

Теги

Похожие вопросы