特定のキーに基づいて行を列に変換

特定のキーに基づいて行を列に変換

次のファイルがあります。ただし、ヘッダーは別の行にあり、ヘッダー値は下に印刷されます。単一行のすべてのヘッダーと特定のヘッダーの値をそのヘッダーの下に印刷したいと思います。

入力する

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行にはヘッダーがあり、他の行にはデータがあります。

関連情報