文字列を時間形式に変換して現在の日付を追加する - 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

関連情報