두 개의 다른 파일에 동일한 텍스트가 나타나는지 확인하는 방법

두 개의 다른 파일에 동일한 텍스트가 나타나는지 확인하는 방법

두 파일에 텍스트 문자열이 있는지 확인하고 싶습니다(트릭 또는 단축키).

파일 1의 내용은 다음과 같습니다.

a.txt
b.txt
c.txt
d.txt

파일 2의 내용은 다음과 같습니다.

c.txt
a.txt
d.txt

파일 1의 문자열이 파일 2의 문자열과 일치하는지 확인하는 방법은 무엇입니까?

답변1

주문하다

방법 1:

for i in `cat p1`; do grep -i "$i" p2 >/dev/null; if [[ $? == 0 ]]; then echo "$i exsists in both files"; else echo "$i doesnt exsists in file p2"; fi; done

산출

a.txt exsists in both files
b.txt doesnt exsists in file p2
c.txt exsists in both files
d.txt exsists in both files

답변2

join, sortgrep

join <(sort /path/to/source) <(sort /path/to/destination) | grep '<string to check>

시험

cat source
a.txt
b.txt
c.txt
d.txt

cat destination
c.txt
a.txt
d.txt

join <(sort source) <(sort destination) | grep 'a.txt'
a.txt

join <(sort source) <(sort destination) | grep 'b.txt'

두 파일의 내용이 일치하지 않는지 확인해야 하는 경우 다음 명령을 실행할 수 있습니다.

cmp --silent <(sort source) <(sort destination) || echo "files are different"

시험

cmp --silent <(sort source) <(sort destination) || echo "files are different"
files are different

대상 파일에 포함되지 않은 소스 파일의 모든 행을 /var/tmp/unmatched 파일에 추가합니다.

comm -23 <(sort source) <(sort destination) > /var/tmp/unmatched

대상 파일에 포함되지 않은 소스 파일의 모든 줄을 제거합니다.

comm -1 <(sort source) <(sort destination) >| source

우리는 bash를 사용하고 있고 noclobber를 설정한 경우 set -o noclobber구문을 사용해야 합니다 >|.

답변3

완료하려면 다음 awk 명령을 사용하십시오.

f2count=`awk 'END{print NR}' p2`
f1count=`awk 'END{print NR}' p1 `
comm_p1_p2=`awk 'NR==FNR{a[$0];next}($0 in a){print $0}' p1 p2| awk 'END{print NR}'`

if [[ $f1count -eq $f2count ]] && [[ $f1count -eq $comm_p1_p2 ]]; then echo "both files p1  and p2 content are same"; else echo "different content found on file p1  and p2"; fi

관련 정보