2012-04-25 2 views
1

find 명령을 사용하여 특정 형식의 모든 파일을 찾습니다. 그 명령은 황금색이었습니다. 그 출력을 awk 명령으로 파이핑 중이며 마지막 밑줄을 필드 구분 기호로 사용하고 싶습니다. 문제는 파일이있는 경로에 따라 사실 앞에 하나 또는 두 개의 밑줄이있을 수 있다는 것입니다.문자 필드의 최근 항목 구분 기호 AWK

find . -regex ".*prob[0-9]*_.*" | awk 'BEGIN { FS = "_.*$" } { print $1 " " $2 }' 

나는 무엇을 내 필드 분리의 정규 표현식 잘못 것은, 그것은 밑줄을 분리하는 생각과 어떤 다음, 단지 하나의 문자 자체를 지정하는 거리가 얻는다. 또한 어떻게 문자의 마지막 발생에 필드 구분 기호를 사용합니까? , 주름 디렉토리뿐만 아니라 밑줄을 가질 수있는 내가 할 Suppress output to StdOut when piping echo

파일 일반적으로 같은 수 있습니다 :

다소 앞서 묻는 질문의 연장이다 /은/디렉토리/probXXXXX_XX

여기서 X는 임의의 정수이다.

해결 방법 나는 모든 밑줄을 구분하고 모든 열을 인쇄하는 방법을 생각해 봤지만 위의 방법으로 작업하는 것이 좋겠다.

+0

현재 수행중인 작업을 감안할 때'FS'에 대한 할당을'_'으로 수정한다고 어떻게 생각하십니까? – geekosaur

+0

어땠어? 나는 FS = "_"를 사용할 수 있지만, 그 다음에는 여분의 밑줄이 분리되어 원하지 않는 컬럼이 생성됩니다. 나는 단지 마지막 밑줄을 분리하고 싶다. – Wuzseen

+0

나머지 답변은 아래를 참조하십시오. – geekosaur

답변

3

awk의 트릭은 명확하지 않지만, $은 연산자입니다. 변수 또는 표현식과 함께, 특히 사전 정의 된 변수 NF과 관련된 표현식을 사용할 수 있습니다. $NF은 마지막 필드 인 두 번째 마지막 필드 인 $(NF - 1)을 가져옵니다.

+0

이것이 내가 마지막 밑줄을 구분하는 데 어떻게 도움이 될지 확신 할 수 없습니다. 나는 마지막 칼럼을 참조하기 위해 $ NF를 사용할 수 있지만 그 칼럼은 올바르게 구분되어 있지 않다는 것을 알고있다. 모든 밑줄을 구분하고 NF와 인쇄를 반복합니다.하지만 한 번에 한 줄씩 표시합니다. '(i = 1; i <= NF; i ++) print $ i' EDIT : 아니면 그냥 정규 표현식에서 $를 이스케이프 처리해야합니까 (이걸 시도하고 있습니다). – Wuzseen

+0

'FS = " _ "이면 열이 정확하게 분리되거나''_ ''이 실제로 열 구분자가 아닙니다. 다른 것에 관해서는,'print'에는 개행 문자가 포함되어 있습니다. 그것을 피하려면'printf'를 사용하십시오. – geekosaur

+0

좋아, 음, 이제는 레코드의 수에 따라 다른 문제 (기쁨)가 있습니다 (대부분의 경우 2 ~ 3 개가 될 수 있습니다) 모든 것을 제대로 포맷 할 수는 없습니다. 모듈 식 산술 사용 모든 n 번째 레코드를 확인한 다음 새 줄을 인쇄하고 있습니다. awk에서 문자열의 문자 수를 세는 방법이 있습니까? 레코드 $ 0, 전체 문자열, 그 안에 밑줄의 수를 세고 싶습니다. 줄 수는 몇 줄입니까? – Wuzseen