n番目の列にm番目の列が含まれる行を取得する方法


9

次のようなドメインとウェブメールを含む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列に含まれている行を取得したい。上記の例の場合、出力は次のようになります。

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

回答:


11

awk

awk -F, '$2 ~ $1"$"' file.csv
  • -F, フィールドセパレータを次のように設定します ,

  • $2 ~ $1"$"2番目のフィールドが最初のフィールドで終了するかどうかをテストします。その場合は、レコードを印刷します(デフォルトのアクション)


を使用するgrepgrep、デフォルトでは一致した行のみが印刷されます。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.