我们有 2 个带有混乱标头的文件

我们有 2 个带有混乱标头的文件

有 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

相关内容