두 번째 열이 단어 목록에 있는 경우 CSV 파일에서 행 삭제

두 번째 열이 단어 목록에 있는 경우 CSV 파일에서 행 삭제

내 이메일 목록에서 제거하고 싶은 무료 이메일 제공업체의 긴 목록을 찾았습니다.https://gist.github.com/tbrianjones/5992856

다음은 소수 또는 단일 도메인 항목에 대해 동일한 작업을 수행하는 현재 사용하는 두 가지 명령입니다. 그러나 다른 파일에서 단어를 가져오도록 명령을 변환하려면 어떻게 해야 합니까? remove.txt예를 들어, 모든 항목을 수동으로 추가하는 대신.

ruby -rcsv -i -ne 'row = CSV::parse_line($_); puts $_ unless row[2] =~ /gmail|hotmail|qq.com|yahoo|live.com|comcast.com|icloud.com|aol.co/i' All.txt

sed -i '/^[^,]*,[^,]*hotmail/d' All.txt

아래는 우리가 사용할 데이터 행입니다.

"fox*******","scott@sc***h.com","821 Ke****on Rd","Neenah","Wisconsin","54***6","UNITED STATES"

답변1

두 단계:

  1. 삭제 스크립트(AUX) 생성 print unless m!gmail.com!hotmail.com|...!(정규식은 크지만 문제 없음)
  2. 그것을 적용하다All.txt

암호:

perl -n0E 's/\n/|/g; say "print unless m!\\b($_ç)\\b!\n" ' remove.txt > AUX
perl -n AUX    All.txt > outfile

업데이트 1: 대소문자를 구분하지 않으려면 i다음을 추가하세요.

perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' remove.txt > AUX

업데이트 2에는 추가 제거 필드가 있습니다. 예외 목록(extra.txt)이 포함된 새 파일을 만들고 다음을 수행합니다.

cat remove.txt extra.txt | 
  perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' > AUX
perl -n AUX   All.txt > outfile

답변2

{   sed -ne's/./^[^,]*,[^,]*&/p' | 
    grep -vf- ./All.txt 
}   <./remove.txt >./outfile

내 생각엔 그게 당신이 물어본 질문인 것 같아요. ruby말씀하신 데이터 케이블과 무슨 관련이 있는지 잘 모르겠습니다 .

대소문자를 구분하지 않고 일치시키려면 -i대소문자 무시 옵션을 추가하세요 grep.

{   sed -ne's/./^[^,]*,[^,]*&/p' | 
    grep -ivf- ./All.txt 
}   <./remove.txt >./outfile

관련 정보