awk를 사용하여 텍스트 파일 구문 분석

awk를 사용하여 텍스트 파일 구문 분석

Gmail API의 메시지가 포함된 변경되는 텍스트 파일이 있습니다. 내용을 분석해야 합니다. 내 텍스트 파일에는 메시지 ID, 메시지, 보낸 사람 세부 정보 및 날짜가 포함되어 있습니다.

15335b114b093448 (메시지 ID)::이름: SINDHUJA,
필요한 서비스: 배관공, 도시: Bangalore, 이메일 ID:[이메일 보호됨], 모바일: 9987654434:: 2016년 3월 2일 수요일 04:58:29 +0000::Flipkart (파트너)[이메일 보호됨]:::
15335254a7e5677a::이름: 헬렌, 필요한 서비스: 전기기사, 도시: Chennai, 이메일 ID:[이메일 보호됨],모바일: 934554434:::2016년 3월 2일 수요일 07:36:37 +0530 (IST)::Times of India[이메일 보호됨]::::

어떻게 분석할 수 있나요? 나는 코드를 시도했다 :

 >>>rawProfiles='''
    15335b114b093448::NAME : SINDHUJA, 
SERVICE REQUIRED: PLUMBER ,CITY :BANGALORE, EMAIL ID : [email protected] ,MOBILE : 9987654434::  Wed, 02 Mar 2016 04:58:29 +0000::Flipkart <[email protected]>:::
    15335254a7e5677a::NAME : HALEN, 
SERVICE REQUIRED: ELECTRICIAN ,CITY :CHENNAI, EMAIL ID : [email protected] ,MOBILE : 934554434:: ::Wed, 2 Mar 2016 07:36:37 +0530 (IST)::The Times of India <[email protected]>::::
    '''
    >>>profilesList=re.split(r'\n{1,}',rawProfiles)

    >>>profilesList =[re.sub(r'\n',' ',profile) for profile in profilesList]

    >>>profilesList =[re.split(r',',profile,maxsplit=2) for profile in profilesList]
    >>>for profile in profilesList:
    print profile

    >>>profilesList =[map(str.strip,profile) for profile in profilesList]
    >>>for profile in profilesList:
    print profile

이것은 나에게 다음을 제공합니다: nameError re not defined.

편집하다

코드는 Python으로 되어 있습니다.

내 예제 출력은 다음과 같아야 합니다.

 파트너       이름 서비스     도시 모바일 사서함  
Flipkart SINDHUJA 배관공 방갈로르 9987654434 [이메일 보호됨]
Times HALEN 전기 기술자 Chennai 9345544342 [이메일 보호됨]

답변1

두 번째 행의 파트너 열에 약간의 문제가 있지만 이 awk를 사용하면 시작할 수 있습니다.

BEGIN {
    FS="::";
    OFS="\t";
    print "PARTNER\tNAME\tSERVICE\tCITY\tMOBILE\tEMAIL"
}
{
    split($2,A,"[:,]");
    if ($3 == " ")
    {
        split($5,B,"[:,]");
    }
    else
    {
        split($4,B,"[:,]");
    }

    split(B[1],C,"mail");
    name=A[2];
    service=A[4];
    city=A[6];
    mobile=A[10];
    email=A[8];
    partner=C[1];
    sub("[(]partner[)]", "",partner);

    print partner"\t"name"\t"service"\t"city"\t"mobile"\t"email;
}

나가:

PARTNER NAME    SERVICE CITY    MOBILE  EMAIL
Flipkart     SINDHUJA    PLUMBER    BANGALORE    9987654434  [email protected] 
The Times of India   HALEN   ELECTRICIAN    CHENNAI  934554434   [email protected] 

(bash,zsh..)쉘에서 실행하고 everything.awk로 저장해야 합니다.

awk -f whatever.awk file

관련 정보