전화번호 열 형식 지정

전화번호 열 형식 지정

파일 데이터에서 전화번호 열을 구문 분석하려고 합니다.

XiaoLi,lxiao,[email protected],6705462234,Jackson,NC764
NatkinWilliam,wnatkin,[email protected],8044344528,Salem,VA22345
EliziMoe,emoe,[email protected],5208534566,Tempe,AZ85282
MaTa,mta,[email protected],4345667345,Austin,TX91030
DianaCheng,dcheng,[email protected],5203456789,Matitsi,WY4587
JacksonFive,jfive,[email protected],5206564573,Kyenta,AZ85483
AdiSrikanthReddy,sadi1,[email protected],6578904566,Wyo,WS67854

전화번호를 가져와서 재구성하는 스크립트를 작성 중입니다. 전화번호 열을 분리할 수 있었습니다.

phonm=`awk -F, '{ print $4 }' data3`

단독으로 사용하면 출력이 나옵니다.

6705462234
8044344528
5208534566
4345667345
5203456789
5206564573
6578904566

문제는 이 숫자를 ###-###-#### 형식으로 지정해야 한다는 것입니다.

그래서 나는 명령을 사용했다

echo "${phonm:0:3}-${phonm:3:3}-${phonm:6:4}"

이것을 실행하면 원하는 결과를 얻습니다. 그러나 첫 번째 줄만 인쇄/형식화합니다.

670-546-2234

이 명령이 열 아래로 반복되도록 하려면 어떻게 해야 합니까?

답변1

awk하이픈으로 구분된 문자열 부분을 인쇄하라고 지시하면 됩니다 .

awk -F, '{print substr($4,1,3) "-" substr($4,4,3) "-" substr($4,7,4)}' < data3

예제 출력:

670-546-2234
804-434-4528
520-853-4566
434-566-7345
520-345-6789
520-656-4573
657-890-4566

출력을 얻는 이유는 awk의 모든 출력을 쉘 변수에 저장한 다음 문자열의 특정 부분을 요청하기 때문입니다. 변수 자체에는 개행 문자가 포함되어 있고 모든 전화번호가 포함되어 있습니다. 수동으로 반복하거나 awk에서 수행하도록 하면 됩니다.

$ echo "$phonm" |od -c
0000000   6   7   0   5   4   6   2   2   3   4  \n   8   0   4   4   3
0000020   4   4   5   2   8  \n   5   2   0   8   5   3   4   5   6   6
0000040  \n   4   3   4   5   6   6   7   3   4   5  \n   5   2   0   3
0000060   4   5   6   7   8   9  \n   5   2   0   6   5   6   4   5   7
0000100   3  \n   6   5   7   8   9   0   4   5   6   6  \n
0000115

답변2

펄입니다.

perl -F, -anE'$F[3] =~ /(\d{3})(\d{3})(\d{4})/; say "$1-$2-$3"' data3

-FPerl에게 각 줄을 쉼표로 구분하도록 지시

-anEPerl에게 행을 배열에 넣도록 지시하고( a) 각 행을 처리하고( n) Perl 5.10을 사용하여 뒤에 있는 코드를 실행합니다.

$F[3]필수 열입니다

그런 다음 정규식 일치를 통해 세 자리 그룹을 캡처합니다 $F[3]. 마지막으로 사이에 음수를 사용하여 STDOUT으로 인쇄합니다.

data3입력 파일입니다.

관련 정보