alr*_*lrz 9 sed awk text-processing csv
我有一个包含域和网络邮件的 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
Run Code Online (Sandbox Code Playgroud)
我想获取 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
Run Code Online (Sandbox Code Playgroud)
hee*_*ayl 11
与awk
:
awk -F, '$2 ~ $1"$"' file.csv
Run Code Online (Sandbox Code Playgroud)
-F,
将字段分隔符设置为 ,
$2 ~ $1"$"
测试第二个字段是否以第一个字段结尾;如果是,则打印记录(默认操作)
使用grep
,grep
默认情况下只打印匹配的行:
grep -E '^([^,]+),.*\1$' file.csv
Run Code Online (Sandbox Code Playgroud)
与sed
, 打印符合条件的行:
sed -nE '/^([^,]+),.*\1$/ p' file.csv
Run Code Online (Sandbox Code Playgroud)
示例:
% 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
Run Code Online (Sandbox Code Playgroud)