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