2012-10-10 4 views
1

기본 프로세스를 따르는 대형 CSV로 작업하고 있습니다.Grep -f 첫 번째 일치 항목 만 반환하십시오.

  1. 백업 작업 원래
  2. 는 새로운 하나에 백업에서 데이터를 추가, 골격 CSV 다른 CSV에서 읽기
  3. 를 생성 내용을 포맷하고 골격
  4. 에 추가합니다.

내가 실행 해요 문제는 내가 백업에서 내용을 읽을 때, 나는 백업에서 원치 않는 데이터를 제외하는 정규 표현식에 포함 된 파일 grep -Ev -f을 사용하고 다음 버전에 포함시킬 것입니다. grep은 중복을 일으키는 STDIN의 모든 행에 대해 파일의 각 정규식을 평가하는 것으로 나타나기 때문에 현재 문제가 있습니다. 간단한 해결책은 sort | uniq을 통해 단순히 파이프로 연결하여 하루라고 부르지 만 현재 사용중인 CSV 포맷과 관련이 있습니다. 필요한 경우 정교 할 수는 있지만 IP 주소를 대량 처리하는 스크립트를 실행하지만 다른 사람이 파일을 수동으로 편집하는 스크립트는 현재 실행중인 상태이며 최종 출력은 모든 자동화 된 콘텐츠가됩니다. 수동 입력은 파일의 맨 아래에 있습니다.

그래서 grep을 반복적으로 반복하지 않아도 패턴이 일치 된 후 줄을 평가하지 않도록 할 것입니까? -m 1을 사용하면 전체 스트림에서 첫 번째 일치가 발생한 후 grep을 멈 춥니 다. 각 행마다 중지해야합니다.

+0

당신은 정규 표현식에 라인의 예를 보여줄 수 있습니까? 문제를 재현 할 수 없습니다. – choroba

+0

'^ 10 \. *' '^ 192 \ .168 \. *' 등 ... RFC1918은 물론 불필요한 몇 개의 임의의 IP 주소도 가능합니다. 문제는 모든 식에 대해 모든 행을 평가한다는 것입니다. 내가 원하는 것은 일치 항목을 찾은 다음 파일에서 식 사용을 중지하는 것입니다. – purblemcgallister

+1

모든 것을 무시하십시오. 목록은 하나의 표현식에만 일치합니다. 사용하고 있던 테스트 파일이 부주의하게 변경되어 중복 결과가 표시되었습니다. 'grep -Ev -f $ list_of_expressions'는 원하는 결과를 생성합니다. – purblemcgallister

답변

관련 문제