데이터가 포함된 입력 파일이 있습니다.
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;