2016-09-09 3 views
-1

다음 정보가 포함 된 텍스트 파일이 있습니다.Awk 특정 형식의 특정 줄 인쇄

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 

예시적인 테이블의 이미지는 여기 : I는 각 행의 첫 번째 필드에 따라 라인 포맷하고자 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'다음에 쉼표를 넣으십시오. 다른 라인에 대한 , 원본 텍스트를 유지 ...

예상 출력과 같아야합니다,

  • ALL 등급은, 겨울, 봄/가을, 여름
  • PER 회로, A, MVA 내용입니다 A, MVA, A,
  • 후 결함 연속
  • 예비 결함 연속 MVA
  • , 555, 126, 520, 119, 470, 108, 660, 150, 620, 142, 560, 128
,

다음을 시도했지만 찾고있는 결과가 나오지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다.

/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) } 
    } 
} 
+1

감사합니다. 질문에 샘플 표를 추가하려고 시도했지만 올바르게 표시되지 않습니다. ... –

+0

더 나은 결과를 얻으려면 예상 출력을 추가하십시오. – Sundeep

+2

데이터 형식을 지정했으나이 사이트를 사용하려면 기본 사항을 배우는 데 시간을 투자해야합니다. – karakfa

답변

1

당신의 접근 방식은 패턴 매칭을 사용하는 대신 도움이 될 것입니다. 따라 올 수있는 템플릿은 다음과 같습니다.

$ awk '/^ALL/ {print ...; next} 
     /^PER/ {print ...; next} 
     /^Pre/ || /^Post/ {print ...; next} 
     {print}' file