특정 키를 기반으로 행을 열로 변환

특정 키를 기반으로 행을 열로 변환

다음 파일이 있습니다. 그러나 헤더는 다른 행에 있고 헤더 값은 아래에 인쇄됩니다. 단일 행의 모든 ​​헤더와 특정 헤더의 값을 해당 헤더 아래에 인쇄하고 싶습니다.

입력하다

name1    name2           name3            name4
XXXX     IN SERVICE      22905            dhr

Name5
123445678
12345687


Nam6             Name7              Name8   Name9 name10
firstin_firstout godwith             1234   17    david

Name11                                   Name12
dhame                                    Dame2
rame                                     Ragha

산출

name1   name2   name3   name4   Name5_1 Name5_2 Nam6    Name7   Name8   Name9   name10  Name11_1    Name11_2    Name12_1    Name12_2
XXXX    IN SERVICE  22905   dhr 123445678   12345687    firstin_firstout    godwith 1234    17  david   dhame   rame    Dame2   Ragha

답변1

다음 중 일부를 저장하세요.script.name

#!/usr/bin/awk -f

FNR == 1 {
split ($0,N," ")
r=""
next
}
{
if (FNR>2) r="_" FNR-1
for (i in N) V[N[i] r]=$i
}
FNR == 3 {
for (i in N) {
  V[N[i]"_"1]=V[N[i]]
  delete V[N[i]]
  }
}
END {
for (n in V) printf("%s ", n)
print ""
for (n in V) printf("%s ", V[n])
print ""
}

그리고 다음과 같이 작동합니다.

awk -f sript.name input_files | column -t

input_file번째 행에는 헤더가 있고 다른 행에는 데이터가 있습니다.

관련 정보