come utilizzare shell per dividere stringa in formato corretto?

voti
-1

Ho questo file con durata di tempo. Alcuni hanno giorni, ma per lo più in hh: mm modulo. L'intero modulo è gg + hh: mm stavo cercando di tr -s '+:' ':' li in gg: hh: modulo mm e poi split ($ 1, tm, :) li calcola in secondi. Tuttavia, il problema che sto affrontando è che dopo questa operazione, il modulo con hh: mm avrebbe hh in tm [1], ma se il suo gg: hh: mm poi il tm [1] sarebbe essere gg. C'è un modo per mettere hh in forma di hh: mm nel tm [2] e mettere tm [1] per essere 0 Per favore?

4+11:26 
10+06:54 
20:27

è l'ingresso

l'uscita Volevo sarebbe (in forma di tm [1], tm [2], tm [3]):

4 11 26 
10 06 54 
0 20 27
È pubblicato 22/07/2016 alle 17:59
dall'utente
In altre lingue...                            


2 risposte

voti
1

Desidero in primo luogo preprocessare con sed (per aggiungere mancante 0+in linee che non hanno un segno più) e poi tr +:agli spazi:

cat a.txt | sed 's/^\([^+]\+\)$/0+\1/g' | tr  '+:' '  '

O come suggerito da Lars, più breve sedversione:

cat a.txt | sed '/+/! s/^/0+/;' | tr  '+:' '  '
Risposto il 22/07/2016 a 18:08
fonte dall'utente

voti
1

awk Al salvataggio!

Si può fare la conversione e calcolo in awk, utilizzando il file di input i valori vengono convertiti in minuti

$ awk -F: '{if($1~/+/){split($1,f,"+");h=f[1]*24+f[2]}
            else h=$1; m=h*60+$2; print $0 " --> " m}' file

4+11:26  --> 6446
10+06:54  --> 14814
20:27 --> 1227
Risposto il 22/07/2016 a 18:28
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more