
Ich habe drei Spalten wie diese:
18:37:12 18:37:31 0
18:37:01 18:37:18 0
Ich möchte, dass die dritte Spalte mit der Differenz der ersten beiden Spalten in Sekunden ausgefüllt wird, und zwar wie folgt:
18:37:12 18:37:31 19
18:37:01 18:37:18 17
Ich verwende dies:
nova migration-list | grep completed | awk '{ print substr($22,12,8), substr($24,12,8) }' | awk 'BEGIN{ FS=" " } { print $0, $2-$1 }'
Ich freue mich über jede Hilfe
Antwort1
Auf einem GNU-System:
awk '{"date -d "$1" +%s"|getline one; "date -d "$2" +%s"|getline two; \
print $1, $2, two-one}' file.txt
"date -d "$1" +%s"|getline one
ruft die Sekunden seit Epoche (mit GNUdate
) für Feld 1 ab und speichert sie in der Variableone
"date -d "$2" +%s"|getline two
macht das gleiche für Feld 2 und speichert das Ergebnis als Variabletwo
print $1, $2, two-one
druckt das Feld eins, zwei und die Subtraktion der Variablen zwei und eins
Beispiel:
% cat file.txt
18:37:12 18:37:31 0
18:37:01 18:37:18 0
% awk '{"date -d "$1" +%s"|getline one; "date -d "$2" +%s"|getline two; print $1, $2, two-one}' file.txt
18:37:12 18:37:31 19
18:37:01 18:37:18 17
Antwort2
Verwenden der integrierten Zeitfunktionen von GNU awk:
awk '
function to_time(time, t,a) {
split(time, a, ":")
t = mktime("1970 1 1 " a[1] " " a[2] " " a[3])
return t
}
{print $1, $2, to_time($2) - to_time($1)}
' file