"Ungrep" - 일치하지 않는 패턴

"Ungrep" - 일치하지 않는 패턴

다음을 수행하는 명령이나 스크립트를 찾고 있습니다.

파일 1.txt:

abcd
efgh 
ijkl
mnop

파일 2.txt:

123abcd123
123efgh123
123mnop123

다음과 같은 명령을 원합니다.

ungrep file1.txt file2.txt

다음을 반환합니다.

ijkl

즉, file2.txt의 grep에 대한 결과를 반환하지 않는 file1.txt의 줄을 제공합니다. file1.txt를 반복하고, 각 줄에 대해 file2.txt를 greping하고, 결과를 저장하고, 결과가 비어 있는 줄을 출력하면 이 작업을 수행할 수 있다는 것을 알고 있지만, 이 작업을 수행하는 더 효율적인 방법이 있기를 바랍니다.

답변1

GNU의 경우 grep다음이 작동합니다. 이 -f옵션을 사용하면 file1.txt"스키마 파일"로 전달되지만 데이터 파일로 두 번째 전달될 수도 있습니다. -o일치하는 부품만 보고하는 데 사용됩니다 . 마지막으로 한 번만 일치하는 단어를 추출합니다. 이는 file1.txt일치하는 항목이 없는 행 에 해당합니다 file2.txt.

grep -h -o -f  file1.txt file2.txt file1.txt | sort | uniq -u
ijkl

답변2

당신은 이것을 할 수 있습니다 awk:

awk '
  NR == FNR {w[$0]; next}
  {for (i in w) if (index($0,i)) delete w[i]}
  END {for (i in w) print i}' file1.txt file2.txt

를 사용하여 index정규식과 일치하는 대신 하위 문자열을 찾습니다.

일치하는 항목이 발견되면 배열에서 해당 단어를 제거하므로 불필요한 검색을 피할 수 있습니다.

관련 정보