두 파일에 텍스트 문자열이 있는지 확인하고 싶습니다(트릭 또는 단축키).
파일 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
, sort
및grep
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