2013-04-25 4 views
1

저는 awk/regex로 다소 초보자입니다. 그래서 나는 noobish 질문에 사과합니다. 나는 필드가 결합되었을 때 awk로 가장 힘든 시간을 보낸 것처럼 보입니다. 몇 가지 플랫 파일 테이블을 구문 분석하는 더 긴 awk 스크립트가 있지만이 특정 열에 문제가 있습니다.awk를 사용하여 긴 문자열 내의 괄호 사이에서 텍스트를 추출하는 방법은 무엇입니까?

내 데이터는 다음과 같습니다

  EFGH1234 
    (ABCD#)EFGH1234 
    (LMNOPQ#)RSTU6789 

나는 그것이 자신의 열 때문에 같은의로 괄호 안의 텍스트를 분리하기 위해 노력하고있어 지금까지 검색을 시도했습니다

  EFGH1234 
    ABCD EFGH1234 
    LMNOPQ RSTU6789 

내가 여기에서하려고하는 것보다 더 복잡한 표현을 발견했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

난 당신이 그들과 함께 작업 할 수 있도록 여분의 '열'을 만들기 위해 노력하고 있으리라 믿고있어. split() function을 사용하여 필드를 배열로 나눕니다. 그리고, 생성하는 요소/키의 수를 세면,이 수를 테스트로 사용할 수 있습니다.

awk '{ n = split($1, a, /[()#]/); print (n==1 ? $0 : a[2] FS a[4]) }' file 

결과 : 예를 들어

  EFGH1234 
ABCD EFGH1234 
LMNOPQ RSTU6789 
+0

나는 이것을 시도 할 비슷한 또 다른 칼럼을 가지고있다. 고맙습니다! – fembot

1

이것이 필요한가요? 필자는 여기서 추출한 것은 paranthesis를 제거한 것입니다.

perl -pe 's/[\(|\)|\#]/ /g' your_file 

또는 AWK에서

:

awk 'gsub("[(|#)]"," "){print}' your_file 
    ABCD EFGH1234 
    LMNOPQ RSTU6789 
    LMNOPQ RSTU6789 
+0

감사합니다! 이것은 나를 위해 일했습니다! – fembot

+2

더 나은 'awk'{gsub (/ [(#)] /, "")} 1 'your_file'로 작성되었습니다. 또한 출력이 잘못되었습니다. – Steve

관련 문제