2011-08-02 3 views
4

비슷한 질문을하는 많은 게시물을 보았습니다. 작동시키지 못해.awk에서 파싱 파이프로 구분 된 입력

<field one with spaces>|<field two with spaces> 

는 AWK와 구문 분석을 시도 : 같은

입력 보인다.

우수 게시물에서 많은 변종를 시도 :

FS = "^[\x00- ]*|[\x00- ]*[|][\x00- ]*|[\x00- ]*$"; 
FS = "^[\x00- ]*|[\x00- ]*\|[\x00- ]*|[\x00- ]*$"; 
FS = "^[\x00- ]*|[\x00- ]*\\|[\x00- ]*|[\x00- ]*$"; 

스틸 파이프 구분 기호가 동작하지 않습니다.

CentOS 사용.

어떤 도움이 필요합니까?

답변

14
echo "field one has spaces | field two has spaces" \ 
| awk ' 
    BEGIN { 
     FS="|" 
} 
{ 
    print $2 
    print $1 
    # or what ever you want 
}' 

#output 

    field two has spaces 
    field one has spaces 

당신은 또한 또한, 모든 AWKS는 FS 값에 대한 멀티 문자 정규식을 취할 수 편집

awk -F'|' { 
    print $2 
    print $1 
}' 

이를 줄일 수 있습니다. Edit2가

은 어떻게 든 원래는이 놓친,하지만 난 당신이 문자 클래스에서 \x00는 사전과 | 문자의 게시물에 포함하려고 참조하십시오. 나는 당신이 \x00 == null char라고 생각하십니까? awk null 문자가 포함 된 파일을 구문 분석 할 수있을 것으로 생각하지 않습니다. 당신은

tr '\x00' ' ' <file.txt> spacesForNulls.txt 

처럼 입력 수험-로웠 또는

tr -d '\x00' <file.txt> deletedNulls.txt 

과 함께 모두 삭제하고 정규 표현식의 일부를 제거 할 수 있습니다. 위와 같이 일부 awkFS 값의 정규식을 지원하지 않습니다. 그리고 tr 트릭을 사용하지 않아도 tr 버전에 따라 null char에 약간 다른 표기법이 필요할 수도 있습니다.

이 정보가 도움이되기를 바랍니다.

+0

'\ x00'과 (와)의 멋진 점. 또는 op는'perl'이나'ruby'와 같은보다 전문화 된 도구를 사용해야합니다. ++ – sjsam

+0

'awk가 널 문자를 포함하는 파일을 파싱 할 수 없을 것이라고 생각합니까? 아니면 두 번째 생각입니까? 'awk '{gsub ("\ x00", "")} 1'이 가능합니다. – sjsam

관련 문제