스크립트에서 두 파일 비교

스크립트에서 두 파일 비교
#!/bin/bash
while read file1 <&3; do
     while read file2 ; do       
        if [ $file1 == $file2 ] ; then
         $file1 >> /infanass/dev/admin/test/newlist.txt
        fi
    echo "$file1"
    echo "$file2"
 done 3</infanass/dev/admin/test/file2.txt
done 3</infanass/dev/admin/test/file1.txt

file1.txt에서 한 줄을 읽은 다음 file2.txt를 반복하여 일치하는 항목이 있는지 확인하고 이를 새 텍스트 파일에 쓰고 싶습니다.

무한루프가 있는 것 같아요..

답변1

더 쉬운 방법은 어떻습니까?

while read line do
    grep "^$line$" file2.txt >>matches.txt
done < file1.txt

설명하다:

이는 행을 반복 하며 그 안의 정확한 행을 찾는 file1.txt데 사용됩니다 . 행이 일치할 수 있으면 이제 해당 행이 다시 출력된 다음 파일로 리디렉션(추가) 됩니다 .grepfile2.txtgrepfile2.txtmatches.txt

스크립트가 멈춘 이유는 두 번째 루프가 입력을 기다리고 있기 때문입니다 . 첫 번째 루프에서 했던 것처럼 파일 설명자로 복사하는 stdin것을 잊어버렸습니다 . 어떤 경우에도 추가 파일 설명자를 만들 필요가 없습니다. 루프가 터미널 대신 파일에서 읽도록 리디렉션 하기만 하면 됩니다.stdin3stdinwhile

답변2

사용comm교차점 찾기:

comm -12 <(sort file1.txt) <(sort file2.txt) > newlist.txt

comm에서는 입력 파일을 정렬해야 합니다.

답변3

더 간단하게 먹이를 주는 것으로 해보는 것은 어떨까요?파일 1grep에 대한 검색어로 사용하여 검색하도록 합니다.파일 2?

$ grep -f file1 file2 > file3

일부 플랫폼에서는 성능 문제로 인해 egrep 또는 ggrep이 필요하거나 필요하다는 점에 유의하세요.

관련 정보