根据特定键将行转换为列

根据特定键将行转换为列

我有如下文件。但标题位于不同的行中,标题值打印在下面。我希望单行中的所有标题和特定标题的值打印到相应标题的下方

输入

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第一行带有标题,其他行带有数据。

相关内容