如何将 header 添加到每条记录的行

How to add header to row for each record

我有一个大文件,列之间用“;”分隔

我已将其转置为行,但我需要将 headers 添加到行中。

例子

输入文件

31561;49215;10;1196825801480000
31561;49215;12;1196825801480000
31561;48665;14;1196825806980000

我使用此代码将列转置为行。

sed '$'!'G' file | tr ';' '\n'

我得到的输出是:

31561
49215
10
1196825801480000

31561
49215
12
1196825801480000

31561
48665
14
1196825806980000

但我想添加 headers 并得到如下内容:

Status1
Information1
Line     : 31561
Point    : 49215
Code:    : 10
TB      :  1196825801480000

Status1
Information1
Line     : 31561
Point    : 49215
Code:    : 12
TB      :  1196825801480000

Status1
Information1
Line     : 31561
Point    : 48665
Code:    : 14
TB      :  1196825806980000

请帮忙解决这个问题。谢谢

我这样修改代码:

awk -F';' '{
   print "Status1"
   print "Information1"
   print "Line     :" ;
   print "Point    :" ; 
   print "Code     :" ; 
   print "TB      :" "\n"; 
}' file

有效:)

使用awk的解决方案:

awk -F';'  '{
   if ( NR != 1 ) printf "\n";
   print "Status1\nInformation1";
   print "Line: " ;
   print "Point: " ;
   print "Code: " ;
   print "TB:", ;
}' file

要使用就地编辑:

awk -i inplace -F';' ...
...
...

使用 awk

$ awk -F";" 'BEGIN{ split("Line;Point;Code;TB",array)} {print "Status1" ORS "Information 1"; for(i=1; i<=NF; i++) print array[i]"     : "$i; printf ORS}' file
Status1
Information 1
Line     : 31561
Point     : 49215
Code     : 10
TB     : 1196825801480000

Status1
Information 1
Line     : 31561
Point     : 49215
Code     : 12
TB     : 1196825801480000

Status1
Information 1
Line     : 31561
Point     : 48665
Code     : 14
TB     : 1196825806980000

split("Line;Point;Code;TB",array) :拆分函数将字符串拆分为array。如果您有更多列,那么您可以在拆分语句本身中提及这些列,for 循环将负责以您想要的格式打印输出。

要在新文件中重定向输出,请说 output_file

$ awk -F";" 'BEGIN{ split("Line;Point;Code;TB",array)} {print "Status1" ORS "Information 1"; for(i=1; i<=NF; i++) print array[i]"     : "$i; printf ORS}' file> output_file