如何为每条记录添加标题行

时间:2017-12-09 19:55:41

标签: linux bash awk gawk

我有一个大文件,列以“;”

分隔

我已将此转置为行,但我需要向行添加标题。

实施例

输入文件

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

但我想添加标题并得到类似的内容:

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     :" $1;
   print "Point    :" $2; 
   print "Code     :" $3; 
   print "TB      :" $4"\n"; 
}' file

它有效:)

2 个答案:

答案 0 :(得分:2)

使用awk的解决方案:

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

使用就地编辑:

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

答案 1 :(得分:2)

使用 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):split函数将字符串拆分为array。如果您有更多列,那么您可以在split语句本身中提及这些列,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