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
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!
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
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
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.
Tags grep text-processing sed