n번째 열에 m번째 열이 포함된 행을 가져오는 방법

n번째 열에 m번째 열이 포함된 행을 가져오는 방법

다음과 같은 도메인과 웹 메일이 포함된 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

답변1

그리고 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

관련 정보