정규식을 사용하여 CSV 파일에서 데이터 추출

정규식을 사용하여 CSV 파일에서 데이터 추출

다음과 같은 CSV 파일이 있습니다.

1004051,[email protected],abc,eaf
1004052,[email protected],edf,eaf
1004053,[email protected],abc,eaf
1004054,[email protected],ghi,eaf

두 번째 필드가 string 으로 시작하는 행만 추출하고 싶습니다 abc_.

1004051,[email protected],abc,eaf
1004053,[email protected],abc,eaf

답변1

,다시 한 번 이것이 첫 번째 필드에 s를 포함하는 것을 피하기 위해 구문 분석이 필요하지 않다고 가정하면 sed다음을 수행할 수도 있습니다.

sed -nE "/[^,]+,abc/p" file

1004051,[email protected],abc,eaf
1004053,[email protected],abc,eaf

-n모든 줄을 인쇄하는 대신 확장 정규식을 사용하여 뒤에 E가 포함되지 않은 시퀀스를 테스트 ,하세요 . 그런 다음 일치하는 경우 에만 린트를 수행하십시오.[^,]+,abcp

답변2

$ awk -F, '$2 ~ /^abc_/' file.csv
1004051,[email protected],abc,eaf
1004053,[email protected],abc,eaf

이는 awk필드 구분 기호로 쉼표를 사용합니다. 두 번째 필드( $2)가 text 로 시작하는지 테스트합니다 abc_. 이는 정규식을 통해 수행됩니다 ^abc_. 테스트가 성공하면 현재 줄이 인쇄됩니다.


입력 파일이 "단순 CSV" 파일이 아니고 쉼표와 줄바꿈이 포함된 인용 필드가 있는 CSV 파일인 경우 CSV 파서를 사용해야 합니다. 예를 들어 다음을 csvgrep사용할 수 있습니다.csvkit툴킷:

$ csvgrep -H -c 2 -r '^abc_' file.csv
a,b,c,d
1004051,[email protected],abc,eaf
1004053,[email protected],abc,eaf

csvgrep두 번째 열이 문자열로 시작하는 모든 레코드를 추출 하는 데 사용됩니다 abc_. 출력의 첫 번째 줄은 csvgrep입력 파일에 헤더 행이 포함되어 있지 않기 때문에 생성된 헤더 행입니다. 이를 원하지 않으면 결과를 전달하여 제거하십시오 sed 1d.

$ csvgrep -H -c 2 -r '^abc_' file.csv | sed 1d
1004051,[email protected],abc,eaf
1004053,[email protected],abc,eaf

당신은 또한 볼 수 있습니다 csvgrep --help.

답변3

파이썬

#!/usr/bin/python
import re
d=re.compile(r'abc')
l=open('filename','r')
for m in l:
    k=m.split(",")
    if re.search(d,k[1]):
        print m.strip()

산출

1004051,[email protected],abc,eaf
1004053,[email protected],abc,eaf

관련 정보