한 파일에서 다른 파일의 모든 항목 목록을 검색하여 결과 파일에 출력하는 방법에 대한 조언을 찾고 있습니다.
검색되는 소스 파일은 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
.