먼저 도메인별로 정렬하고 싶은 이메일 주소의 긴 목록이 있으므로 다음과 같은 행을 선택하고 싶습니다.
email: [email protected]
email: [email protected]
그리고 이것을 얻었습니다 :
ru.yandex email: [email protected]
com.changeip.josephay905s email: [email protected]
어떻게 해야 하나요?
다음은 더 큰 데이터 세트입니다.
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
답변1
노력하다:
awk -F'@' '
{ split($2, flip, ".");
for (i=length(flip); i>=1; i--) printf flip[i] (i!=1?".":" ");
print $0;
}' infile
@
필드 구분자로 정의됨-F'@'
- 점 구분 기호의 두 번째 필드를
.
다음과 같은 배열로 분할합니다.flip
- 배열의 요소를 마지막부터 첫 번째까지 반복하고 각 요소를 인쇄한 다음
.
(첫 번째 요소 제외) 전체 행을 인쇄합니다$0
.
참고: awk
array_length는 지원되지 않습니다(참조AWK - 배열의 스토리지 또는 인덱스를 계산하는 방법), 다음 접근 방식을 시도해 보십시오. 먼저 배열이 사용하는 요소 수를 찾아 for 루프에서 최대값으로 사용하는 것입니다. 예를 들면 다음과 같습니다.
awk -F'@' '
{ split($2, flip, ".");
max=i=0; for (elements in flip) max++;
for (i=max; i>=1; i--) printf flip[i] (i!=1?".":" ");
print $0;
}' infile
답변2
한 줄로 하려고 한다면 이 펄을 사용하면 됩니다. 기본적으로 -F 플래그는 awk와 동일하므로 각 줄을 문자로 나눕니다 @
. 패드의 첫 번째 부분은 $s
도메인의 반전된 부분을 갖는 name이라는 변수를 생성합니다. 한 줄의 두 번째 부분은 역방향 도메인을 인쇄한 다음 $_
변수에 저장된 원래 입력을 인쇄합니다.
perl -F'@ ' -lane '$s = join ".", reverse split/\./, $F[-1]; print "$s $_"'
답변3
#sed -r -n 's/^([^@]+@)(.+)\.([a-z]{2,3})[\r\n\t ]{0,}$/\3.\2 \1\2.\3/gip' <<< "email: [email protected]"
또는
#sed -r -n 's/^([^@]+@)(.+)\.([a-z]{2,3})[\r\n\t ]{0,}$/\3.\2 \1\2.\3/gip' ./your file
업데이트: 세 번째 도메인을 지원하도록 수정되었습니다.
sed -r -n 's/^([^@]+@)([^\.]+)(\.[^\.]+){0,1}\.([a-z]{2,3})[\r\n\t ]{0,}$/\4\3.\2 \1\2\3.\4/gip' <<< "email: [email protected]"
result: ru.yandex email: [email protected]
그리고
sed -r -n 's/^([^@]+@)([^\.]+)(\.[^\.]+){0,1}\.([a-z]{2,3})[\r\n\t ]{0,}$/\4\3.\2 \1\2\3.\4/gip' <<< "email: [email protected]"
result: com.changeip.josephay905s email: [email protected]
@TERDON 귀하의 의견에 감사드립니다.
답변4
귀하의 요청을 직접 이행했습니다."첫 번째 도메인별 정렬", 단순히 각 행의 시작 부분에 추가 열을 만드는 대신 행별로 정렬할 준비를 합니다.
sort -t@ -k2,3 -k1,2 file
"대규모 데이터 세트"의 출력
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
도메인 구성 요소를 "가장 중요"에서 "가장 중요하지 않음"으로 그룹화하려는 설명에서 변경된 요구 사항을 해결하려면 다음을 시도하십시오.
rev file | sort | rev
"더 큰 데이터 세트"에 대한 출력 수정
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]
email: [email protected]