다른 파일에 나타나는 목록을 파일에서 검색하는 방법

다른 파일에 나타나는 목록을 파일에서 검색하는 방법

한 파일에서 다른 파일의 모든 항목 목록을 검색하여 결과 파일에 출력하는 방법에 대한 조언을 찾고 있습니다.

검색되는 소스 파일은 DNS 서버의 짧은 이름, FQDNS(A 레코드 및 CNAME) 목록입니다. 입력 파일은 모든 항목과 일치시키려는 짧은 이름 목록입니다. 예를 들어 검색 목록에 다음이 포함된 경우:

host123

해당 콘텐츠가 포함된 모든 레코드를 찾고 싶습니다. 예를 들면 다음과 같습니다.

host123.example.com
host123-idrac.example.com
host123-backup.example.com
test-cname.example.com > host123.example.com

저는 이런 종류의 일에 조금 익숙하지 않기 때문에 아마도 grep으로 할 수는 있지만 다른, 아마도 더 우아한 방법을 배우고 싶습니다.

답변1

나는 grep이 올바른 선택이라고 생각합니다. 효율성을 위해 "grep -f"를 사용할 수 있습니다. 이는 for 루프나 그와 유사한 것을 추가하는 것보다 빠릅니다. 단지 재미로 awk를 사용하거나 2개의 중첩된 for 루프를 사용할 수 있습니다.

grep -f search_list_file database_file

답변2

파일에서 한 줄을 차지하는 패턴(예 patterns: filename ) 을 검색하면 searched_file결과가 다음 위치에 덤프됩니다 result.out.

$ awk 'FNR==NR {a[tolower($0)]=1;next} {for (i in a) if(index(tolower($0),i)) print }' \
  patterns searched_file > result.out

대소문자를 구분하지 않는 검색이 적용됨답변작성자: stackoverflow.com의 JamesBrown. 이것은 에서 테스트되었습니다 bash.

관련 정보