Cách nhận hàng có cột thứ n chứa cột thứ m


9

Tôi có một tệp CSV chứa tên miền và email, như thế này:

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

Tôi muốn nhận các hàng trong đó cột webmails chứa cột tên miền của cùng một hàng. Đối với ví dụ trên, đầu ra phải là:

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

Câu trả lời:


11

Với awk:

awk -F, '$2 ~ $1"$"' file.csv
  • -F, đặt dấu phân cách trường là ,

  • $2 ~ $1"$"kiểm tra nếu trường thứ hai kết thúc với trường thứ nhất; nếu vậy, in bản ghi (hành động mặc định)


Với grep, greptheo mặc định, chỉ in các dòng phù hợp:

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

Với sed, dòng in phù hợp với điều kiện:

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

Ví dụ :

% 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.