Extrai um inteiro em uma linha de string

1

Estou tendo um problema com a extração de um número de um arquivo de texto. Basicamente, parece-se com isso (tudo em uma linha; dividido aqui por um pouco mais de legibilidade):

[{"id":1,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197540,"frame_content":"some other informations...},
{"id":2,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197552,"frame_content":"some other informations...},
{"id":3,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197556,"frame_content":"some other informations...},
{"id":4,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197558,"frame_content":"some other informations...},
and so on.....]

O que eu gostaria de fazer é extrair todos os valores depois do marcador de timestamp. A única coisa é que o meu arquivo é feito de apenas uma única linha , o que o torna um pouco complicado e eu não acho que posso mudar isso. Eu tentei os comandos sed e grep depois de procurar na internet por uma solução, mas até agora não foi bem-sucedida.

Eu gostaria de receber ajuda sobre esse assunto:)

Obrigado!

    
por Einsiedler 16.02.2018 / 16:31

3 respostas

1

Você pode usar

grep -oP '"timestamp":\s*\K\d+' filename

não importa se tudo está em uma linha, ele procurará todas as ocorrências de números depois da string "timestamp:"

resultado:

1510690197540
1510690197552
1510690197556
1510690197558
    
por 16.02.2018 / 16:37
3

Supondo que o arquivo seja um arquivo JSON bem formado, você deve usar um analisador JSON para analisá-lo.

Usando o analisador de jq JSON em um arquivo:

$ jq '.[] | .timestamp' filename.json
1510690197540
1510690197552
1510690197556
1510690197558

A expressão .[] | .timestamp cria um loop implícito sobre todos os objetos na matriz e extrai o valor timestamp de cada um.

Também pode ser escrito

$ jq '.[].timestamp' file.json

Não relacionado:

Para encontrar o id do objeto com o máximo timestamp :

$ jq 'max_by(.timestamp).id' file.json
4

Para imprimir bastante seu arquivo JSON:

$ jq . file.json
    
por 16.02.2018 / 16:40
0

solução awk:

awk -F, '{ for (i=1;i<=NF;i++) { if ($i~/timestamp/) { split($i,slt,":");print slt[2]  } } }' filename

resultado:

1510690197540
1510690197552
1510690197556
1510690197558

Faça um loop sobre cada um dos campos delimitados por uma vírgula e, em seguida, leve o campo e a correspondência de padrões para o registro de data e hora. Se houver uma correspondência, divida o campo usando: em um array slt. Em seguida, imprima o segundo elemento da matriz.

    
por 16.02.2018 / 16:43