leia os números de telefone do arquivo e armazene-os em outro arquivo exclusivamente

0

Eu tenho um arquivo de texto de entrada, por exemplo, myfile.txt , que contém dados como

WO_ID 
------------------------------------------------------------------------
moveover_virus_8493020020_virus.final 
moveover_virus_7483920322_virus.csvwork  

Apenas número de telefone está mudando Eu tenho umas 13 ordens de trabalho como essa Eu preciso pegar apenas um número como uma entrada para isso Eu preciso de um script em Perl. Eu preciso criar esse script que estou tentando grep mas não consigo obter apenas números.

    
por rajaputh 20.07.2016 / 14:07

4 respostas

1

Olhando para o seu arquivo de entrada, você pode fazer algo parecido com isto, usando awk :

awk -F"_" '{print $3}' inputfile | uniq > outputfile

ou usando grep ,

grep -o -E '[0-9]+' inputfile | uniq > outputfile

usando sed ,

sed 's/[^0-9]*//g;/^\s*$/d' inputfile | uniq 
    
por 20.07.2016 / 14:13
1

não há necessidade de uniq

awk -F"_" 'NF>2 {if ( !a[$3]++) print $3}' inputfile

onde

  • NF>2 garante que um número de telefone esteja presente
  • !a[$3]++ será avaliado como 1 pela primeira vez, 0 outras vezes
por 20.07.2016 / 14:20
0

Você pode usar este script perl para sua perpose:

    #!/bin/perl
    my $str = "moveover_virus_7483920322_virus.csvwork";
    my  $phone = (split /_/, $str)[2];
    print "$phone\n";

teste o script:

    [iahmad@ijaz-cms ~]$ ./perltest 
    7483920322
    
por 20.07.2016 / 14:25
0

Eu sou um fã de olhar em volta para fazer este tipo de trabalho. Eu copiei dados de exemplo para um arquivo de texto chamado "teste" e, em seguida, executei o seguinte

$ grep -oP '(?<=s\_).*(?=\_v)' test 
8493020020
7483920322

grep -o significa retornar apenas a correspondência

-P significa usar regex Perl

? < = significa "corresponde a qualquer coisa que venha depois de s_" (note que o "_" precisa ser escapado com o "\")

? = significa "corresponde a qualquer coisa que vem antes de v_" (mais uma vez note que o "_" precisa ser escapado)

Assim, o resultado final é uma correspondência para qualquer coisa entre "s_" (virus_) e "-v" (_virus)

    
por 20.07.2016 / 17:21