ヘッダーが正しくないファイルが2つあります。

ヘッダーが正しくないファイルが2つあります。

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

awkfile2を各ヘッダー値に対応する複数のファイルに分割し、file1にのみヘッダーとして保存されている任意の順序で一緒に貼り付けるために使用されます。

awk 'BEGIN{getline;h1=$1;h2=$2;h3=$3}
          {print $1>h1; print $2>h2; print $3>h3}
' file2

それからpastefile1の先頭から始めます。

paste `cat file1`
DEF     GHI     ABC
MNO     PQRS    JKL

file1のヘッダー順序ではなくヘッダー順序で貼り付けるには、次のようにします。

paste Field{1..3}
GHI     DEF     ABC
PQRS    MNO     JKL

関連情報