あるファイルから別のファイルのすべての項目のリストを検索して結果ファイルに出力する方法についてのアドバイスを探しています。
検索されるソースファイルは、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
ファイル内の1行を占めるパターン(patterns
ファイル名など)を検索すると、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
。