grep은 여러 문자열을 찾았지만 목록에서 각 문자열의 첫 번째 항목만 인쇄합니다.

grep은 여러 문자열을 찾았지만 목록에서 각 문자열의 첫 번째 항목만 인쇄합니다.
zgrep -f /onip/appt/app/yemi/usage_biglist.txt \
    /onip/cdr/output/nor/bac/filec/$count/nordat.gz \
    >> /onip/appt/app/yemi/have_usage.txt

일반화하다

  1. 파일의 첫 번째 문자열을 선택하십시오.usage_biglist.txt
  2. 파일에서 grep을 수행 nordat.gz하고 결과를 다음 위치에 저장합니다.have_usage.txt
  3. 다음 문자열을 선택 usage_biglist.txt하고 n번째 문자열까지 동일한 작업을 수행합니다.

답변1

grep(또는 zgrep귀하의 경우)은 항상 파일에서 일치하는 모든 줄을 출력합니다.

각 패턴 일치를 개별적으로 수행한 다음 결과를 전달할 수 있습니다 head -n 1.

while read -r pattern; do
    zgrep "$pattern" file.gz | head -n 1
done <pattern_list.txt >output_file.txt

귀하의 경우:

while read -r pattern; do
    zgrep "$pattern" /onip/cdr/output/nor/bac/filec/$count/nordat.gz | head -n 1
done </onip/appt/app/yemi/usage_biglist.txt >/onip/appt/app/yemi/have_usage.txt

답변2

나는 다음을 사용할 것이다 awk:

gunzip < "/onip/cdr/output/nor/bac/filec/$count/nordat.gz" |
  awk '
    !list_processed {strings[$0]; next}
    {
      do_print = 0
      for (s in strings)
        if (index($0, s)) {
          delete strings[s]
          do_print = 1
        }
    }
    do_print
  ' /onip/appt/app/yemi/usage_biglist.txt list_processed=1 - \
    >> /onip/appt/app/yemi/have_usage.txt

답변3

사용

zgrep -m 1 -f

바꾸다

zgrep -f

관련 정보