헤더가 잘못된 파일이 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

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

관련 정보