Como obter linhas cuja enésima coluna contém a mth coluna

9

Eu tenho um arquivo CSV contendo domínios e webmails, como este:

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

Eu quero ver as linhas nas quais a coluna webmails contém a coluna de domínios da mesma linha. Para o exemplo acima, a saída deve ser:

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
    
por alrz 09.01.2017 / 09:39

1 resposta

11

com awk :

awk -F, '$2 ~ $1"$"' file.csv
  • -F, define o separador de campo como ,

  • $2 ~ $1"$" testa se o segundo campo termina com o primeiro campo; Em caso afirmativo, imprima o registro (ação padrão)

Com grep , grep por padrão, imprima apenas linhas correspondentes:

grep -E '^([^,]+),.*$' file.csv

Com sed , as linhas de impressão correspondem à condição:

sed -nE '/^([^,]+),.*$/ p' file.csv

Exemplo :

% 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 '^([^,]+),.*$' 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 '/^([^,]+),.*$/ 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
    
por 09.01.2017 / 09:49