วิธีรับแถวที่คอลัมน์ n ประกอบด้วยคอลัมน์ mth


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

ฉันต้องการรับแถวที่คอลัมน์เว็บเมลมีคอลัมน์โดเมนของแถวเดียวกัน สำหรับตัวอย่างข้างต้นผลลัพธ์ควรเป็น:

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"$"ทดสอบว่าฟิลด์ที่สองลงท้ายด้วยฟิลด์แรกหรือไม่ ถ้าเป็นเช่นนั้นให้พิมพ์บันทึก (การกระทำเริ่มต้น)


ด้วยgrep, grepโดยค่าเริ่มต้นพิมพ์เฉพาะคู่สาย:

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.