我有一个包含以下信息的文本文件。
Table X1: Circuit Thermal Overload Ratings for xxx
Rated Temperature: 50 ºC
ALL RATINGS ARE Winter Spring / Autumn Summer
PER CIRCUIT Amps MVA Amps MVA Amps MVA
Pre-Fault Continuous 485 111 450 103 390 89
Post-Fault Continuous 580 132 540 123 465 106
Table X2: Circuit Thermal Overload Ratings for xxx
Rated Temperature: 65 ºC
ALL RATINGS ARE Winter Spring / Autumn Summer
PER CIRCUIT Amps MVA Amps MVA Amps MVA
Pre-Fault Continuous 555 126 520 119 470 108
Post-Fault Continuous 660 150 620 142 560 128
示例表的图像在这里: example table
我希望根据每行的第一个字段格式化行。 对于以“Pre”或“Post”开头的行,请在第一个字符串后面和每两个数字之间插入逗号。 printf(“%s%s,%d,%d,%d,%d,%d,%d \ n”,$ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7,$ 8) 对于以“ALL”开头的行,请在“ARE”,“Winter”和“Autumn”之后插入逗号。 对于以'PER'开头的行,请在'CIRCUIT','Amps'和'MVA'之后插入逗号。 对于其他行,请保留原始文本...
预期输出应该如下,
我尝试了以下但是它没有产生我正在寻找的结果。任何帮助将不胜感激......
/Table/
{for(n=0; n<=5; n=n+1) {
if(n<2){getline}
if(n==2)
{printf("%s%s%s,%s,%s%s%s,%s",$1,$2,$3,$4,$5,$6,$7,$8)}
if(n==3)
{printf("%s%s,%s,%s,%s,%s,%s,%s",$1,$2,$3,$4,$5,$6,$7,$8)}
if(n==4||n==5)
{printf("%s %s,%d,%d,%d,%d,%d,%d\n",$1,$2,$3,$4,$5,$6,$7,$8) }
}
}
答案 0 :(得分:1)
您的方法无济于事,而是使用模式匹配。这是您可以关注的模板
$ awk '/^ALL/ {print ...; next}
/^PER/ {print ...; next}
/^Pre/ || /^Post/ {print ...; next}
{print}' file