Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在unix中如何将时间从hh:mm:ss分割为hh-mm-ss?_Bash_Date_Awk - Fatal编程技术网

Bash 在unix中如何将时间从hh:mm:ss分割为hh-mm-ss?

Bash 在unix中如何将时间从hh:mm:ss分割为hh-mm-ss?,bash,date,awk,Bash,Date,Awk,我的意见是 ./filename Apr 11 16 05:10:20 Jun 12 16 06:22:35 我想将Apr 11 16 05:10:20转换为16 04 11 05 10 20 我正在使用以下函数 convert_date_2() { local months=( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ) local i for (( i=0; i<11; i++ )) do [[ $1 = ${months

我的意见是

 ./filename Apr 11 16 05:10:20 Jun 12 16 06:22:35
我想将
Apr 11 16 05:10:20
转换为
16 04 11 05 10 20
我正在使用以下函数

convert_date_2() 
{
local months=( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec )
local i

for (( i=0; i<11; i++ ))
do
[[ $1 = ${months[$i]} ]] && break
done
printf "%2d %02d %02d %02d %02d %02d \n" $3 $(( i+1 )) $2 $4 $5 $6
}

Start=$( convert_date_2 $1 $2 $3 $4 )
Stop=$( convert_date_2 $5 $6 $7 $8 )
echo $Start;
echo $Stop;
convert_date_2()
{
当地月份=(1-2-3-4-5-6-7-8-9-10-11-12)
本地i

对于((i=0;i您只需使用
date
命令本身即可

date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
测试:

$ date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
16 04 11 05 10 20

$ var_date="Jun 12 2016 06:22:35"
$ date -d "$var_date" '+%y %m %d %H %M %S'
16 06 12 06 22 35
注:此处,输入日期格式的年份为
2016
而非
16

更新:

$ date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
16 04 11 05 10 20

$ var_date="Jun 12 2016 06:22:35"
$ date -d "$var_date" '+%y %m %d %H %M %S'
16 06 12 06 22 35
试试这个:

$ var_date="Jun 12 16 06:22:35"
$ date -d "$(echo $var_date | awk '$3="20"$3')" '+%y %m %d %H %M %S'

$ date -d "$(awk '$3="20"$3' <<< $var_date)" '+%y %m %d %H %M %S'
$var_date=“Jun 12 16 06:22:35”
$date-d“$(echo$var_date | awk'$3=“20”$3')”+%y%m%d%H%m%S”

$date-d“$(awk'$3=“20”$3'您只需使用
date
命令本身即可

date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
测试:

$ date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
16 04 11 05 10 20

$ var_date="Jun 12 2016 06:22:35"
$ date -d "$var_date" '+%y %m %d %H %M %S'
16 06 12 06 22 35
注:此处,输入日期格式的年份为
2016
而非
16

更新:

$ date -d 'Apr 11 2016 05:10:20' '+%y %m %d %H %M %S'
16 04 11 05 10 20

$ var_date="Jun 12 2016 06:22:35"
$ date -d "$var_date" '+%y %m %d %H %M %S'
16 06 12 06 22 35
试试这个:

$ var_date="Jun 12 16 06:22:35"
$ date -d "$(echo $var_date | awk '$3="20"$3')" '+%y %m %d %H %M %S'

$ date -d "$(awk '$3="20"$3' <<< $var_date)" '+%y %m %d %H %M %S'
$var_date=“Jun 12 16 06:22:35”
$date-d“$(echo$var_date | awk'$3=“20”$3')”+%y%m%d%H%m%S”

$date-d“$(awk'$3=“20”$3'您可以将代码更改为:

convert_date_2()  {
   local months='JanFebMarAprMayJunJulAugSepOctNovDec'
   local p="${months%$1*}"
   printf "%2d %02d %02d %s\n" $3 $(( ${#p} / 3 +1)) $2 "${4//:/ }"
}

start=$(convert_date_2 $1 $2 $3 $4)
stop=$(convert_date_2 $5 $6 $7 $8)
echo "start=$start"
echo "sop=$stop"

对新函数的调用示例:

convert_date_2 Apr 11 16 05:10:20
16 04 11 05 10 20

您可以将代码更改为:

convert_date_2()  {
   local months='JanFebMarAprMayJunJulAugSepOctNovDec'
   local p="${months%$1*}"
   printf "%2d %02d %02d %s\n" $3 $(( ${#p} / 3 +1)) $2 "${4//:/ }"
}

start=$(convert_date_2 $1 $2 $3 $4)
stop=$(convert_date_2 $5 $6 $7 $8)
echo "start=$start"
echo "sop=$stop"

对新函数的调用示例:

convert_date_2 Apr 11 16 05:10:20
16 04 11 05 10 20

谢谢。但是我不能使用
2016
,因为我的日志文件中的数据格式为
16
年。我不能更改格式。是否可以使用
16
年?如何将结果存储在变量中?Will
Start=$(转换为日期2$1$2$3$4)
work?谢谢。但是我不能使用
2016
,因为我的日志文件中的数据格式为
16
年。我不能更改格式。是否可以使用
16
年?我如何将结果存储在变量中?Will
Start=$(转换日期2$1$2$3$4)
工作?谢谢。请解释$3$(${{p}代码的2“${4/://}”部分(${p}/3+1))
是将
$p
的长度除以3,然后将
1
添加到结果中以得到月份,谢谢。您能解释一下代码的3$(${p}/3+1))$2“${4/://>”(${p}/3+1)部分吗
是将
$p
的长度除以3,然后将
1
添加到结果中,得到月份#