최신 정보:
다음은 dc
'출력 기반' 을 사용하는 새로운 구현입니다 . 총 합계가 60 시간을 초과하면 3이 아닌 4 개의 공백으로 구분 된 값 이 출력됩니다 . (총합이 1 시간 미만인 경우 공백으로 구분 된 두 값만 출력됩니다.)
awk '{print $2}' file.txt | tr : \ | dc -f - -e '60o0ddd[+r60*+r60d**+z1<a]dsaxp'
질문에 표시된 것처럼 입력은시, 분, 초의 3 배로 가정합니다.
제공된 입력의 출력은 다음과 같습니다.
16 43
원래 답변 :
이것을 dc
데스크 계산기로 하자 . 의 백엔드 bc
이며 종종 암호로 간주되지만 매우 유연합니다.
먼저 시간을 제공하고 콜론을 공백으로 변환하는 일부 전처리 :
awk '{print $2}' | tr : ' '
우리는 또한 Sed와 함께 이것을 할 수 있습니다 :
sed -En -e 's/^.*([0-9][0-9]):([0-9][0-9]):([0-9][0-9]).*$/\1 \2 \3/p'
나는 Awk와 함께 갈 것이고 tr
그것은 더 간단하기 때문이다. 위의 명령 중 하나가 다음 형식으로 정리 된 출력을 생성합니다. (나는 그것을 더 흥미롭게 생각하기 때문에 내 자신의 예제 텍스트를 사용하고 있습니다. 시간이 포함되어 있습니다. 잘 작동합니다.)
$ cat input
9 39 42
8 04 50
7 49 32
10 01 54
7 19 18
위 형식의 시간이 주어지면 다음 Sed 스크립트를 통해 실행하고 dc
그림과 같이 결과를 파이프하십시오 .
sed -e '1s/^/0 /' -e 's/$/ r 60 * + r 60 60 * * + +/' -e '$s/$/ 60 60 * ~ 60 ~ f/' input | dc
(옆으로 스크롤을 줄이기 위해 아래로 끊어짐 :)
sed <input \
-e '1s/^/0 /' \
-e 's/$/ r 60 * + r 60 60 * * + +/' \
-e '$s/$/ 60 60 * ~ 60 ~ f/' |
dc
출력은 해당 순서대로 초, 분, 시간이됩니다. (이것은 역순입니다.) 나는 단지 배우기 dc
때문에 이것이 완벽한 해결책은 아니지만 첫 번째 살펴보기에는 꽤 좋다고 생각합니다 dc
.
터미널에서 직접 붙여 넣은 입력 및 출력 예 :
$ cat input
9 39 42
8 04 50
7 49 32
10 01 54
7 19 18
$ sed -e '1s/^/0 /' -e 's/$/ r 60 * + r 60 60 * * + +/' -e '$s/$/ 60 60 * ~ 60 ~ f/' input | dc
16
55
42
$