Coluna de número de telefone de formatação

1

Estou tentando analisar uma coluna de números de telefone a partir de um arquivo de dados.

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

Estou escrevendo um script que pegará o número do telefone e o reorganizará. Consegui isolar a coluna do número de telefone com

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

quando usado sozinho, recebo a saída

6705462234
8044344528
5208534566
4345667345
5203456789
5206564573
6578904566

O problema é que eu preciso formatar esses números no formato ### - ### - ####

Então eu usei o comando

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

Quando eu corro isso, eu faço o resultado desejado. Mas só imprimirá / formatará a primeira linha.

670-546-2234

Como faço esse comando percorrer a coluna?

    
por Ububtunoob 31.10.2017 / 00:41

2 respostas

4

Simplesmente diga awk para imprimir as partes da string, separadas pelas hipensas:

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

Exemplo de saída:

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

A razão pela qual você obteve a saída que você fez foi que você salvou toda a saída do awk em uma variável do shell e, em seguida, pediu as partes específicas dessa string. A própria variável tinha novas linhas embutidas e continha todos os números de telefone, você só teria que percorrê-los todos manualmente, ou simplesmente fazer o awk fazê-lo.

$ 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
    
por 31.10.2017 / 00:50
0

Aqui está o Perl.

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

-F diz ao Perl para dividir cada linha em vírgulas

-anE diz ao Perl para colocar linhas em um array ( a ); para executar o processo de cada linha ( n ), e para executar o código que segue usando Perl 5.10

$F[3] é a coluna desejada

Em seguida, ele captura três grupos de dígitos por correspondência de regex de $F[3] . E finalmente os imprime para STDOUT com minuses no meio.

data3 é o arquivo de entrada.

    
por 31.10.2017 / 01:03