다음과 같은 세 개의 열이 있습니다.
18:37:12 18:37:31 0
18:37:01 18:37:18 0
다음과 같이 세 번째 열을 처음 두 열의 초 단위 차이로 채우고 싶습니다.
18:37:12 18:37:31 19
18:37:01 18:37:18 17
나는 이것을 사용하고 있습니다 :
nova migration-list | grep completed | awk '{ print substr($22,12,8), substr($24,12,8) }' | awk 'BEGIN{ FS=" " } { print $0, $2-$1 }'
도움을 주시면 감사하겠습니다.
답변1
GNU 시스템에서:
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
epoch 이후 1초 동안의 필드를 가져오고(GNU 사용date
) 변수에 저장합니다.one
"date -d "$2" +%s"|getline two
필드 2에 대해 동일한 작업을 수행하고 결과를 변수로 저장합니다.two
print $1, $2, two-one
필드 1과 2를 인쇄하고 변수 2와 1의 빼기
예:
% 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
답변2
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