Comment obtenir des lignes dont la nième colonne contient la mième colonne

9

J'ai un fichier CSV contenant des domaines et des webmails, comme ceci:

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

Je veux obtenir des lignes où la colonne des webmails contient la colonne des domaines de la même ligne. Pour l'exemple ci-dessus, la sortie doit être:

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
alrz
la source

Réponses:

11

Avec awk:

awk -F, '$2 ~ $1"$"' file.csv
  • -F, définit le séparateur de champ comme ,

  • $2 ~ $1"$"teste si le deuxième champ se termine par le premier champ; si c'est le cas, imprimez l'enregistrement (action par défaut)


Avec grep, greppar défaut, imprimer uniquement les lignes correspondantes:

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

Avec sed, lignes d'impression correspondant à la condition:

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

Exemple :

% 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
heemayl
la source