저는 수백 개의 IP 주소로 구성된 짧은 목록을 가지고 file1
있으며 이러한 IP 주소 중 기본 목록에서 누락된 주소가 있는지 확인하고 싶습니다 file2
. 출력 > 두 경우의 결과를 인쇄하는 파일로 리디렉션을 찾으세요. 예를 들면 다음과 같습니다.
xx.xx.xx.xx missing
xx.xx.xx.xx found
6개의 유사한 질문을 검토하고 많은 것을 배웠지만 기존 질문 중 어느 것도 내 질문에 완전히 대답하지 않아서 직접 만들었습니다.
awk
두 가지를 모두 사용하여 여러 가지 접근 방식을 시도했지만 grep -F -f
비교 결과를 조정하고 논리적 설명을 작성하는 데 문제가 있습니다.
6개의 기존 답변을 검토하고 많은 것을 배웠지만 그 중 어느 것도 내가 이해하는 방식으로 정확하게 내 목표를 해결하지 못했습니다.
답변1
while 루프를 사용하세요:
while IFS= read -r i; do
grep -Fq "$i" file && echo "$i found" || echo "$i missing"
done <ip_addresses
while
파일의 각 줄을 반복합니다.ip_addresses
grep -Fq
-F
어떤 문자와도 일치하지 않는 일치 항목이 포함된 행을 고정 문자열( )에서 검색합니다 . 이-q
플래그는grep
아무것도 인쇄되지 않도록 합니다.&& echo "$i found"
성공 하면grep
주소를 찾았습니다.|| echo "$i missing"
그렇지 않다면 누락된 것입니다.
답변2
file이 l1
알 수 없는 IP 주소를 포함하는 목록이고 file이 l2
기본 목록이라고 가정합니다.
l1
다음은 다음에만 있고 다음에는 없는 모든 IP 주소 목록입니다 l2
.
egrep -v "`cat l2|xargs -I {} echo -n '|{}'|sed -e 's/^|//'`" l1
옵션을 제거하면 및 에 나타나는 모든 IP 주소가 -v
나열됩니다 .l1
l2
egrep "`cat l2|xargs -I {} echo -n '|{}'|sed -e 's/^|//'`" l1
두 파일 모두 형식이 동일 l1
해야 합니다 .l2
다음 명령:
cat l2|xargs -I {} echo -n '|{}'|sed -e 's/^|//'
|
파일 내용에서 구분된 IP 주소 목록을 만듭니다 l2
. 에 전달된 정규식의 문자입니다 |
.or
egrep
파일로 테스트:
$ cat l1
192.168.0.10
192.168.2.14
192.168.0.11
192.168.0.9
$ cat l2
10.64.10.200
192.168.4.0
192.168.2.3
192.168.0.10
192.168.0.11
192.168.1.0
192.168.2.0
분실된 IP 주소 찾기:
$ egrep -v "`cat l2|xargs -I {} echo -n '|{}'|sed -e 's/^|//'`" l1
192.168.2.14
192.168.0.9
중복된 IP 주소 찾기:
$ egrep "`cat l2|xargs -I {} echo -n '|{}'|sed -e 's/^|//'`" l1
192.168.0.10
192.168.0.11
파일이 너무 길어서 최대 명령줄 길이를 초과하지 않기를 바랍니다. :-(