我有一个大文件,列以“;”
分隔我已将此转置为行,但我需要向行添加标题。
实施例
输入文件
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
它有效:)
答案 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