次のようなドメインとウェブメールを含むCSVファイルがあります。
site1.com,mail.site1.com
site2.com,testmail.com
site3.com,mx.site3.com
site4.com,smtp.site4.com
site5.com,foomail.com
site6.com,barmail.com
site7.com,webmail.site7.com
site8.com,01mx.site8.com
site9.com,foobarmail.com
site10.com,mx-smtp222.site10.com
Webmails列に同じ行のdomains列が含まれている行を取得したいと思います。上記の例では、出力は次のようになります。
site1.com,mail.site1.com
site3.com,mx.site3.com
site4.com,smtp.site4.com
site7.com,webmail.site7.com
site8.com,01mx.site8.com
site10.com,mx-smtp222.site10.com
awk
の場合:
awk -F, '$2 ~ $1"$"' file.csv
-F,
はフィールドセパレータを,
として設定します
$2 ~ $1"$"
2番目のフィールドが最初のフィールドで終わるかどうかをテストします。その場合、レコードを印刷します(デフォルトのアクション)
grep
を使用すると、デフォルトでgrep
は一致した行のみを出力します。
grep -E '^([^,]+),.*\1$' file.csv
sed
を使用して、条件に一致する行を印刷します。
sed -nE '/^([^,]+),.*\1$/ p' file.csv
例:
% cat file.txt
site1.com,mail.site1.com
site2.com,testmail.com
site3.com,mx.site3.com
site4.com,smtp.site4.com
site5.com,foomail.com
site6.com,barmail.com
site7.com,webmail.site7.com
site8.com,01mx.site8.com
site9.com,foobarmail.com
site10.com,mx-smtp222.site10.com
% awk -F, '$2 ~ $1"$"' file.txt
site1.com,mail.site1.com
site3.com,mx.site3.com
site4.com,smtp.site4.com
site7.com,webmail.site7.com
site8.com,01mx.site8.com
site10.com,mx-smtp222.site10.com
% grep -E '^([^,]+),.*\1$' file.txt
site1.com,mail.site1.com
site3.com,mx.site3.com
site4.com,smtp.site4.com
site7.com,webmail.site7.com
site8.com,01mx.site8.com
site10.com,mx-smtp222.site10.com
% sed -nE '/^([^,]+),.*\1$/ p' file.txt
site1.com,mail.site1.com
site3.com,mx.site3.com
site4.com,smtp.site4.com
site7.com,webmail.site7.com
site8.com,01mx.site8.com
site10.com,mx-smtp222.site10.com