패턴을 검색하고 패턴과 일치하는 줄부터 다음 줄을 인쇄합니다.

패턴을 검색하고 패턴과 일치하는 줄부터 다음 줄을 인쇄합니다.

데이터가 포함된 입력 파일이 있습니다.

cell1
input a;
input a2;
input b;
output z;
cell2 
input a1;
input a2;
output zn;
cell3 
input a1;
input a2;
input b1;
output z;

내 출력 데이터가 다음과 같기를 원합니다.

cell1(a,a2,b,z);
input a;
input a2;
input b;
output z;
cell2 (a1,a2,zn);
input a1;
input a2;
output zn;
cell3 (a1,a2,b1,z);
input a1;
input a2;
input b1;
output z;

나는 셀을 검색하여 시작하고 셀이 발견되면 다음 셀이 나타날 때까지 $2 셀 뒤의 해당 셀에서 다음 행을 인쇄()하고 반복하는 아이디어로 시작했습니다. 하지만 실행하는 데 문제가 있습니다.

나는 코드를 시도했다

awk ' /cell/{if (NR >1) print cell , line; cell = 0;line =0} { line= $4} END { print cell, line }' file 

이 코드를 실행하면 다음과 같은 결과가 나타납니다.

cell1 0
cell2 0

답변1

tac이 스크립트를 사용하면 파일을 거꾸로 구문 분석할 수 있습니다 awk.

tac file | awk '
    /^cell/ {print $0 "(" args ");"; args = ""; next}
    {print; gsub(";","",$2); args = (args ? $2 "," args : $2)}
' | tac

샘플 입력으로 테스트하면 다음과 같은 출력이 제공됩니다.

cell1(a,a2,b,z);
input a;
input a2;
input b;
output z;
cell2 (a1,a2,zn);
input a1;
input a2;
output zn;
cell3 (a1,a2,b1,z);
input a1;
input a2;
input b1;
output z;

관련 정보