문자열을 시간 형식으로 변환하고 현재 날짜를 추가합니다 - Shell/ksh

문자열을 시간 형식으로 변환하고 현재 날짜를 추가합니다 - Shell/ksh

문자열을 명령 매개변수로 사용 HHMMSS하고 이를 시간 형식으로 변환하여 HH:MM:SS현재 날짜에 추가하고 싶습니다(스크립트에서 날짜를 생성하려면 "date" 명령을 사용해야 함).

예를 들어 명령줄 인수가 이면 현재 날짜 093500로 변환하여 추가해야 합니다 .09:35:002018-05-16 09:35:00

예:

$ ./convertTime.sh 093500
2018-05-16 09:35:00

답변1

이면 kshksh93을 의미합니다.

$ t=093500
$ DATEMSK=/dev/stdin <<<%H%M%S printf "%(%F %T)T\n" "$t"
2018-05-17 09:35:00

또는:

$ printf '%(%F)T %.8s\n' now "${t//??/\0:}"
2018-05-17 09:35:00

또는 휴대용(Bourne 또는 csh 시리즈 쉘 또는 fish)

$ date +"%Y-%m-%d $t" | sed 's/\(..\)\(..\)$/:\1:\2/'
2018-05-17 09:35:00

(rc와 유사한 쉘의 경우 를 사용하십시오 date +'%Y-%m-%d '$t)

답변2

이것이 가능한 해결책입니다. 작동 방식은 다음과 같습니다.

$ ./format_date.sh 092533
2018-05-17 09:25:33
#!/bin/bash

format_time(){
    point=0
    while [ "$point" -le "${#1}" ];
    do
        string=$string"${1:$point:2}"
        if [ "$point" -lt "$((${#1}-2))"  ]
        then
        string=$string":"
        fi
        point=$((point+2))
    done
    echo "$string"
}

echo "$(date +'%Y-%m-%d')" "$( format_time "$1" )"

이는 표준 bash및 매개변수 대체를 활용하므로 질문 태그에 적합하지만 양식이 POSIX에서 작동하지 않기 때문에 kshPOSIX에는 적합하지 않습니다 ./bin/sh${variable:position:offset}/bin/sh

관련 정보