두 파일을 비교하여 동일한 목록 얻기

두 파일을 비교하여 동일한 목록 얻기

file1.txt(50줄)

TERYUFV00000010753
TERYUFV00000009526 

file2.txt(500줄)

TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target

출력.txt

TERYUFV00000010753 refids_11775_known_1/1_target
TERYUFV00000009526 refids_739_known_8/10_target

file1.txt(50줄)와 file2.txt(500줄)를 비교하고 file2.txt에서 file1.txt와 동일한 목록을 얻습니다.

Join 및 fgrep 명령을 시도했는데 빈 파일이 출력됩니다.

답변1

조인을 사용할 때 각 행의 항목은 데이터베이스의 "셀"과 비슷하지만 정렬되어야 하므로 시도해 볼 수 있습니다.

sort file1.txt > file1_t.txt
sort file2.txt > file2_t.txt

그런 다음 연결

$ join file1_t.txt file2_t.txt

이렇게 하면 두 파일 모두에 있는 모든 셀 항목의 목록인 외부 조인이 제공됩니다. 이 목록을 단 두 개의 파일 항목으로 줄이려면 위 명령의 출력을 uniq로 파이프하십시오.

$ join file1_t.txt file2_t.txt | uniq

답변2

fgrep -f file1.txt file2.txt

여기서는 file1.txt에서 검색 패턴을 가져와서 file2.txt에서 검색합니다. 텍스트가 고정되어 있으므로 fgrep더 빠른 검색 작업을 위해 사용합니다.

여기에 이미지 설명을 입력하세요.

답변3

sort당신은 당신보다 먼저 있어야 합니다 join.

$ cat a.in
TERYUFV00000010753
TERYUFV00000009526
$ cat b.in
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000018907 refids_12023_known_21/22_target
TERYUFV00000010753 refids_11775_known_1/1_target
$ join a.in b.in
$ join <(sort a.in) <(sort b.in)
TERYUFV00000009526 refids_739_known_8/10_target
TERYUFV00000010753 refids_11775_known_1/1_target

답변4

다음 줄이 유효합니까?

grep -iw -f file1.txt file2.txt

파일이 Windows 클라이언트에서 서버로 업로드되는 경우 먼저 dos2unix를 실행해야 합니다.

dos2unix file1.txt file2.txt

위 명령이 작동하지 않으면 다음 줄을 시도하여 file1.txt 줄의 시작이나 끝에 추가로 인쇄되지 않는 문자가 있는지 확인할 수 있습니다. file1.txt 항목에 인쇄되지 않는 불필요한 문자가 있으면 file2.txt의 grep이 실패할 수 있습니다.

cat -v file1.txt
sed -n -l file1.txt

관련 정보