스왑

2012-09-14 3 views
-1

는 하나 SED/AWK/펄 패턴 일치 End이 발견하는 경우스왑

입력 파일

Start variable 1 
End variable 2 
A 
Z 
Next 

Start variable b 
End variable a 
X 
Y 
Next 
... 
... 
... 

Start variable m 
End variable n 
M 
N 
Next 

, 스왑이를 정렬 나를 도와 드릴까요

Start variable 1 
A 
End variable 2 
Z 
Next 

Start variable b 
X 
End variable a 
Y 
Next 
... 
... 
... 

Start variable m 
M 
End variable n 
N 
Next 
+0

'End'가 정의 된 두 줄의 동작이 어떻게 정의되어 있습니까? 'A'''''''''''''''''''' End''''''''''''''''''''''''''''''End'''''''''''''End'''는' – amon

답변

2

간단한 펄 솔루션 :

출력 파일의 연속 선. $n은 '이전', 즉 '이전 줄이 끝'인 경우 '현재', 즉 $b을 나타냅니다.

perl -ne 'print unless $n = /^End /; $l = $_ if $n ; print $l if $b; $b = $n' 

을 또는 equivalen하지만 짧은 : 귀하의 질문에 업데이트 된 버전, 단지 라인을 기억 $l를 추가 들어

perl -ne 'print unless $n = /^End$/; print "End\n" if $b; $b = $n' 

인쇄 할

perl -ne '$n = /^End/and $l = $_ or print; $b and print $l; $b = $n' 
+0

죄송합니다. 내 질문을 다시 확인해주십시오. END는 고정 된 문자열이 아닙니다. – user1228191

+1

@ user1228191 : 업데이트를 참조하십시오. – choroba

+0

정말 열심히 노력하고 있습니다. 배열로 입력 파일을 읽는다면, 그 라이너 코드의 도움으로 출력 파일 형식으로 배열의 내용을 배열하는 방법을 알려줄 수 있습니다.이 작업을 도와 줄 수 있습니까? – user1228191

3

sed 솔루션 :

sed -n '/^End\s/{h;n;p;g};p' inputfile 
0
sed -n '/^End/{h;n;G};p' inputfile 

이렇게하면 +