다음을 수행하는 명령이나 스크립트를 찾고 있습니다.
파일 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
정규식과 일치하는 대신 하위 문자열을 찾습니다.
일치하는 항목이 발견되면 배열에서 해당 단어를 제거하므로 불필요한 검색을 피할 수 있습니다.