Ich habe Zeit in Millisekunden und ich möchte es auf Zeitperiode formatieren. Zum Beispiel so (nicht unbedingt genau so): 1d 23h 15m 13s. Wie kann es mit jq getan werden?Format Zeitraum mit jq Konsolen-Tool
1
A
Antwort
3
Hier ist eine Lösung, die die Berechnungen direkt ausführt.
def roundto(n): (./n|floor)*n ;
def timefmt(ms):
def calcsecs: .s_to_m = (.seconds | roundto(60)) | .secs = .seconds - .s_to_m ;
def calcmins: .minutes = .s_to_m/60 | .m_to_h = (.minutes | roundto(60)) | .mins = .minutes - .m_to_h ;
def calchrs: .hours = .m_to_h/60 | .h_to_d = (.hours | roundto(24)) | .hrs = .hours - .h_to_d ;
def calcdays: .days = .h_to_d/24 ;
def fmtelt(e;u): if e>0 then " \(e)\(u)" else "" end ;
def fmt:
.s = " \(.secs)s"
| .m = fmtelt(.mins; "m")
| .h = fmtelt(.hrs; "h")
| .d = fmtelt(.days; "d")
| "\(.d)\(.h)\(.m)\(.s)"[1:]
;
{seconds: (ms/1000)|floor} | calcsecs | calcmins | calchrs | calcdays | fmt
;
timefmt($ms)
Wenn diese Filter sind in filter.jq
dann
$ jq -Mnr --argjson ms 1505752580000 -f filter.jq
Ausgänge
17427d 16h 36m 20s
kleinere Abstände nur die relevanten Felder angezeigt werden. z.B.
$ jq -Mnr --argjson ms 1505750 -f filter.jq
Ausgänge
25m 5s
1
Hier ist eine kurze, aber einfache Implementierung einer Funktion zur Millisekunden eines kondensierten "d h m s" string, ohne Rundung überführt. Es wäre trivial, dies so zu modifizieren, dass auch der Rest in Millisekunden enthalten wäre.
# input: milliseconds
# output: ignore millisecond remainder
def formattime:
def f(u): if .>0 then " \(.)" + u else "" end ;
# emit a stream of the remainders
def s: foreach (1000,60,60,24,1) as $i ([.,0];
.[0] as $n
| ($n/$i | floor) as $m
| [$m, $n - ($m*$i)];
if $i == 1 then .[0] else .[1] end);
[s] as [$ms, $s, $m, $h, $d]
| {s : " \($s)s",
m : ($m|f("m")),
h : ($h|f("h")),
d : ($d|f("d")) }
| "\(.d)\(.h)\(.m)\(.s)"[1:]
;
formattime
Beispiel:
$ jq -r -f formattime.jq
1505752580000
17427d 16h 36m 20s
6006
6s
1
0s
Verwandte Themen
- 1. Parsing JSON-Format mit jq
- 2. Wie jq verwenden, wenn die Variable einen Zeitraum hat
- 3. Konvertieren Zeitraum/Zeit Format von MySQL-Datenbank
- 4. jq '.' formatierte JSON-Datei zurück zum ursprünglichen json-Format mit jq
- 5. Formatierung json Daten mit jq
- 6. R: Konvertieren von Wide-Format in Long-Format mit mehreren 3 Zeitraum Variablen
- 7. jq
- 8. Verschmelzen s3 Manifest-Dateien mit jq
- 9. Bash mit JQ Gruppierung
- 10. Ungültige Zahlenliteral mit jq
- 11. Mit JQ Grid konfrontiert
- 12. Pandas: Wie kann ich "Jahr-Monat" Format Spalte (Zeitraum) generieren?
- 13. CSV zu JSON mit jq
- 14. merge json Objekte mit jq
- 15. Iterate über json mit jq
- 16. jq mit JSON-Daten iterieren
- 17. jq - Karte Objektwerte mit starts()
- 18. Wohin mit benutzerdefinierten JQ-Funktionen?
- 19. Probleme Makel Linktext mit JQ
- 20. JQ Auswahlfilter mit mehreren Argumenten
- 21. JSON zu CSV mit JQ
- 22. Abfrage in jq mit Args
- 23. Muster passenden Feldnamen mit jq
- 24. Mit Exponential-Potenzen in jq
- 25. Convert Jq
- 26. Zeitraum zu Zeichenfolge
- 27. Parsing Complex JSON-Datei mit JQ Problem
- 28. Jq Installationsfehler
- 29. Aber ich kämpfe um JSON mit jq
- 30. Wie json von einem Format in ein anderes konvertieren mit jq
Sie müssen es selbst tun - Ihre eigene Mathematik schreiben + Verzweigungslogik, so wie man es in einer anderen Sprache. Haben Sie sich darum bemüht? Können Sie Ihre versuchte Arbeit zeigen? –
jq170727 Antwort ist besser, dass ich jemals erfinden könnte. :-) – wjtk