2012-03-01 3 views
3

awk를 사용하여 격리 된 필드뿐만 아니라 인접한 필드가 여러 개있는 원래 문자열의 일부를 검색 할 수 있는지 궁금합니다. 동봉 된 구분 기호? 예를 들어Awk : 문자열로 구분 기호가있는 몇 개의 필드 가져 오기

'.' 구분자

foo.bar.baz.test 

에 AWK를 사용하고, 필드 2와 3을 추출 AWK 이야기, 나는 자동으로

bar.baz 

를 검색 할 수 있어야합니다. 나중에 손으로 문자열의 일부분을 다시 구성 할 수 있다는 것을 알았지 만, 그렇게 생각하지는 않습니다.

아이디어가 있으십니까?

+0

이 '$ 2 OFS $ 3'이 맞지 않다고 생각하십니까? 당신은 awk build-in 함수를 찾기를 원합니다. – Kent

+0

글쎄, 아직 $ 2 OFS $ 3이 무슨 뜻인지 아직 모르겠다 :) 그래서 내가 묻는거야. – iksemyonov

답변

2

:

kent$ echo "foo.bar.baz.test"|awk 'BEGIN{FS=OFS="."}{print $2,$3}' 
bar.baz 

편집

나는 필드의 알 수없는 번호 (없는 하드 코딩 $ 2, $ 3를 일반화 할 필요가 , 끝까지 $ 2로 시작하는 모든 것 - 이 가능합니까?)

아래 테스트를 참조하십시오 :

kent$ echo "a.b.c.d.e.f.g.h.j.foo.bar"|awk 'BEGIN{FS=OFS="."}{for(i=2;i<=NF;i++)s=i==NF?s $i:s $i OFS;print s}' 
b.c.d.e.f.g.h.j.foo.bar 
+0

OK, 그래서이 OFS 구조에 대해 배워야합니다. 팁 주셔서 감사합니다! 또한 알 수없는 필드 수로 일반화해야합니다 (하드 코딩 $ 2, $ 3이 아니지만 끝까지 $ 2로 시작하는 모든 것이 가능합니까?) – iksemyonov

+0

@SemenSemenych 내 대답을 편집하십시오 – Kent

2

이 당신을 위해 작동 될 수 있습니다

echo foo.bar.baz.test | awk -F. -vOFS=. '{print $2,$3}' 
bar.baz 

인쇄 명령의 , 출력 필드 분리 (OFS)의 약어입니다. 나는 이것이 당신이 원하는 경우 매우 확실하지 않다

+0

오타가 있습니까? -vOFS =. 누락 된 공간일까요? – iksemyonov

+0

'-vOFS = .'는 나를 위해 작동하지만'-v OFS = .'가 좋다면 – potong

관련 문제