두 번째 파일이 일치하면 첫 번째 파일의 패턴을 인쇄합니다.

두 번째 파일이 일치하면 첫 번째 파일의 패턴을 인쇄합니다.

나는 이 파일들을 가지고 있습니다.

파일 1.txt

A
B
C
D
E

파일 2.txt

A 1
B 2
D 3

내가 원하는 출력은 다음과 같습니다.

A
B
D

사용해봤지만 grep -Ff file1.txt file2.txt결과는

A 1
B 2
D 3

답변1

위치 join:

join -o 1.1 f1.txt f2.txt

기본적으로 join파일의 공백으로 구분된 첫 번째 필드가 연결됩니다. -o 1.1출력을 지정하면 첫 번째 파일의 첫 번째 필드에만 관심이 있습니다.

sort파일이 정렬되지 않은 경우 먼저 파일을 정렬 해야 합니다 .

join -o 1.1 <(sort f1.txt) <(sort f2.txt)

예:

$ cat f1.txt                    
A
B
C
D
E

$ cat f2.txt                    
A 1
B 2
D 3

$ join -o 1.1 f1.txt f2.txt 
A
B
D

답변2

join이보다 훨씬 쉽지만 를 사용하여 시도해 볼 수도 있습니다 awk.

awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt

데모

$ cat file1.txt                    
A
B
C
D
E

$ cat file2.txt                    
A 1
B 2
D 3

$ awk 'NR==FNR{a[$1]=$1}NR!=FNR && $1 in a{print a[$1]}' file1.txt file2.txt
A
B
D

관련 정보