Speedtest Ookla Kein Zeitstempel in der CSV-Ausgabe

Speedtest Ookla Kein Zeitstempel in der CSV-Ausgabe

Als ich also den offiziellen Speedtest-Client von Ookla ausführte und in eine CSV-Datei ausgab, bemerkte ich, dass die Ausgabe kein Zeitstempelfeld hatte. Das JSON hat zwar eins, aber ich kenne mich mit jq nicht besonders gut aus und der Versuch, die JSON-Ausgabe in eine CSV-Datei zu konvertieren, ist nicht sinnvoll.

Gibt es eine Möglichkeit, die Ausgabe zu übernehmen und sie in eine Datei mit einem Zeitstempel am Anfang weiterzuleiten?

Dies ist die Ausgabe als JSON

{"type":"result","timestamp":"2021-07-22T16:14:17Z","ping":{"jitter":0.035999999999999997,"latency":3.9399999999999999},"download":{"bandwidth":117078051,"bytes":884657048,"elapsed":7601},"upload":{"bandwidth":117029963,"bytes":467614102,"elapsed":4006},"packetLoss":0,"isp":"CenturyLink","interface":{"internalIp":"192.168.0.35","name":"eth0","macAddr":"E4:5F:01:2F:1D:39","isVpn":false,"externalIp":"71.214.44.165"},"server":{"id":10161,"name":"CenturyLink","location":"Orlando, FL","country":"United States","host":"orlando.speedtest.centurylink.net","port":8080,"ip":"205.171.98.14"},"result":{"id":"64657421-d008-4053-9832-2d1a9b01b649","url":"https://www.speedtest.net/result/c/64657421-d008-4053-9832-2d1a9b01b649"}}

und dies ist die Ausgabe der CSV (mit Kopfzeilen)

"server name","server id","latency","jitter","packet loss","download","upload","download bytes","upload bytes","share url"
"The Villages - The Villages, FL","25753","33.338","0.302","0","117318528","112406990","1488776432","1053747984","https://www.speedtest.net/result/c/8bbb92b8-880d-4021-b5e5-c90206862d18"
"CenturyLink - Orlando, FL","10161","4.013","0.399","0","76816660","112435444","1158108878","473391675","https://www.speedtest.net/result/c/17508892-6fc7-4616-84bb-810d314c50af"
"CenturyLink - Orlando, FL","10161","3.533","0.407","0","115293486","97552291","1002647576","574510787","https://www.speedtest.net/result/c/9913a846-1fbf-4d69-a1e9-27430914d397"

Ich versuche lediglich, die hinzugefügten Zeitstempeldaten, die von JSON ausgegeben werden, in ein CSV-Format zu bringen, damit ich sie weiterverarbeiten kann.

Antwort1

Dieser Einzeiler gibt aus, was Sie möchten:

<JSON> | jq -r '.timestamp, .server.name, .server.id, .pi ng.latency, .ping.jitter, .packetLoss, .download.bandwidth, .upload.bandwidth, .download.bytes, .upload.bytes, .result.url' | tr '\n' ',' | sed '$s/,$/\n/' | tee -a <CSV File>

Mithilfe Ihres JSON-Beispiels habe ich alle gewünschten Elemente mit folgendem extrahiert jq -r:

  • .timestamp
  • .server.name
  • .server.id
  • .ping.latency
  • .ping.jitter
  • .packetLoss
  • .download.bandwidth
  • .upload.bandwidth
  • .download.bytes
  • .upload.bytes
  • .result.url

Anschließend wurden die Ergebnisse weitergeleitet, tr `\n' ','um eine durch Kommas getrennte Liste zu erstellen. Anschließend wurden die trErgebnisse weitergeleitet sed '$s/,$/\n/', um das abschließende Komma zu entfernen.

Das Ergebnis sollte wie folgt aussehen:

2021-07-22T16:14:17Z,CenturyLink,10161,3.94,0.036,0,117078051,117029963,884657048,467614102,https://www.speedtest.net/result/c/64657421-d008-4053-9832-2d1a9b01b649

Antwort2

Wenn Sie versuchen, direkt in die CSV-Datei zu gelangen, habe ich nach einigen eigenen Recherchen Folgendes getan:

#!/bin/sh

now=\"$(date +"%Y-%m-%d %H:%M:%S")\",
ookla -c http://www.speedtest.net/api/embed/vz0azjarf5enop8a/config -f csv | grep -v download | sed "s/^/$now/" >> /mnt/merlin/speedtest.csv

Speichern Sie das Datum in dem Format, das Ihnen am besten passt. Ich habe auch Anführungszeichen und ein Komma hinzugefügt, um es mit den generierten Daten abzugleichen. Sie werden dies später verwenden.

Ich habe die Ookla-Ausgabe durchlaufen lassen, grepum die Kopfzeile zu entfernen, und sie dann verwendet, sedum den Zeitstempel einzufügen, den ich am Anfang der Zeile erstellt habe. Ich hänge dies dann an meine CSV-Datei an. Ich führe dies als Cron-Job auf meinem Router aus. Ich hoffe, das hilft.

verwandte Informationen