파일 1:
test1,1
test2,2
test3
문서 #2:
test2
test1
test4
원하는 출력:
test4
답변1
다음을 위해 사용할 수 있습니다 grep
:
$ grep -vwf <(cut -d, -f1 file1) file2
test4
설명하다
grep
옵션:-v, --invert-match Invert the sense of matching, to select non-matching lines. -w, --word-regexp Select only those lines containing matches that form whole words. -f FILE, --file=FILE Obtain patterns from FILE, one per line.
따라서 결합된
grep -vwf patternFile inputFile
것은 "inputFile에서 전체 단어로 나타나지 않는 패턴파일의 행을 찾는 것"을 의미합니다.<(command)
: 이를 프로세스 교체라고 하며 이를 지원하는 셸(예: bash)에서는 기본적으로 파일처럼 작동합니다. 이를 통해 명령 출력을cut
grep options 의 "파일" 로 사용할 수 있습니다-f
.cut -d, -f1 file1
:file1의 첫 번째 쉼표로 구분된 필드만 인쇄합니다.
데이터가 실제로 표시된 것과 같은 경우 -x
에만 사용하는 대신(전체 행과 일치)을 사용하고 싶을 수도 있습니다 .-w
-x, --line-regexp
Select only those matches that exactly match the whole line.
그래서:
$ grep -vxf <(cut -d, -f1 file1) file2
test4
또한 file1
정규식 문자( 등)를 포함할 수 있는 .
경우 *
다음 ?
을 사용할 수도 있습니다 -F
.
-F, --fixed-strings
Interpret PATTERNS as fixed strings, not regular expressions.
그래서:
$ grep -Fvxf <(cut -d, -f1 file1) file2
test4
답변2
사용 cut
및 grep
:
grep -F -x -v -f <(cut -d',' -f1 file1) file2
cut -d',' -f1 file1
첫 번째 필드를 인쇄 file1
하고 grep
출력을 패턴 입력 파일로 사용합니다(옵션 -f
). 옵션 -F
은 고정 문자열과 전체 행을 일치시키고 일치를 반전시키는 -x
데 사용됩니다 .-v
답변3
:~$ cat > toto
a b
c d
e f
:~$ cat > titi
a b
d e
f g
:~$ awk 'NR==FNR{c[$1]++;next};c[$1] == 0' toto titi
d e
f g
이것은 여러분의 요구 사항을 해결하는 데 사용할 수 있는 예제 목록에서 가져온 예제일 뿐입니다.
답변4
이 설정의 경우
grep -ffile2 -v file1
test3
할 것입니다. 다만, 오탐지 등의 경우에는 추가적인 조치가 필요한 경우가 있으니 주의하시기 바랍니다.