CSV 텍스트 줄에서 일부 필드만 추출하는 방법

CSV 텍스트 줄에서 일부 필드만 추출하는 방법

Linux 명령을 사용하여 아래 줄의 특정 정보를 추출하는 방법을 찾으려면 도움이 필요합니다.

391,(INSIDE-A),to,(OUTSIDE-A),source,static,SRV_I_N1909,SRV_NAT_I_N1909,destination,static,REDE_AMX_MCK,REDE_AMX_MCK,translate_hits=4399,untranslate_hits=4413
431,(INSIDE-A),to,(OUTSIDE-A),source,static,WK_I_5.5.4.56,SRV_NAT_10.9.3.212,translate_hits=284903,untranslate_hits=8472
432,(INSIDE-A),to,(OUTSIDE-A),source,dynamic,GRP_WKS_HOSTS_,WK_NAT_10.9.7.229,destination,static,G_SRV_ENG_CL,G_SRV_E_CL,translate_hits=0,untranslate_hits=0
436,(INSIDE-A),to,(OUTSIDE-A),source,static,SRV_I_ND007,NAT_10.9.4.238,destination,static,R_MCK,R_MCK,translate_hits=1966,untranslate_hits=1966
437,(INSIDE-A),to,(OUTSIDE-A),source,static,WK_I_5.8.104.120,NAT_A_10.9.7.245,translate_hits=84908,untranslate_hits=1965
440,(INSIDE-A),to,(OUTSIDE-A),source,dynamic,REDE_NET1,NAT_A_10.9.7.247,destination,static,SRV_BT_10.3.33.9,SRV_BT_10.3.33.9,translate_hits=18970,untranslate_hits=18970

보시다시피 라인은 원하는 정보와 다릅니다.

440, translate_hits=18970,untranslate_hits=18970

답변1

다음을 시도해 볼 수 있습니다.

grep -o "^[0-9]*\|,tran.*$" file | sed 'N;s/\n,/,/'

산출:

391,translate_hits=4399,untranslate_hits=4413
431,translate_hits=284903,untranslate_hits=8472
432,translate_hits=0,untranslate_hits=0
436,translate_hits=1966,untranslate_hits=1966
437,translate_hits=84908,untranslate_hits=1965
440,translate_hits=18970,untranslate_hits=18970

답변2

파일에 쉼표나 개행 문자가 포함된 필드가 없다고 가정하면(예: "간단한 CSV 파일") 다음을 사용하여 각 줄에서 첫 번째와 마지막 두 필드를 가져올 수 있습니다.

$ awk -F , 'BEGIN { OFS=FS } { print $1, $(NF-1), $NF }' file.csv
391,translate_hits=4399,untranslate_hits=4413
431,translate_hits=284903,untranslate_hits=8472
432,translate_hits=0,untranslate_hits=0
436,translate_hits=1966,untranslate_hits=1966
437,translate_hits=84908,untranslate_hits=1965
440,translate_hits=18970,untranslate_hits=18970

NF각 줄의 필드 수를 포함하는 특수 변수이며 입력 및 출력 필드 구분 기호를 모두 쉼표로 설정합니다. 블록 에서는 print관심 있는 필드만 인쇄합니다.

관련 정보