使用awk转换日期

时间:2014-08-28 06:59:53

标签: unix

我有一个文件dates.csv,其数据如下:

Mar 27 2014~Aug 24 2014~Apr 06 2014~

我一直在尝试将其转换为时间戳,并且在所有尝试中均未成功。

我尝试了这段代码: -

#!/bin/bash

i=0
j=`head -1 dates2| tr '~' '\n' | wc -l`
echo $i
echo $j

while [ $i -lt $j ]
do
    k=`awk 'BEGIN{FS="~"}{print $(i+1)}' dates2`
    echo $k
    date +"%m/%d/%Y %H:%M:%S" -d "$k"
    (( i++ ))
done

awk命令总是为print $ 1执行,我试图对FS="~"分隔的所有列进行迭代。

我想要的输出是:

03/24/2014 00:00:00~08/24/2014 00:00:00~04/06/2014 00:00:00~

2 个答案:

答案 0 :(得分:0)

我尝试使用while并且有效:

#!/bin/bash
while read data
do
   fDate=`date +"%m/%d/%Y %H:%M:%S" -d "$data"`
   echo "new Date: $fDate"
done < dates2

答案 1 :(得分:0)

首先,将日期读入数组:

$ IFS='~' read -ra dates < file

然后循环遍历数组并转换每个数组,将其附加到新字符串:

$ converted=""
$ for d in "${dates[@]}"; do 
    converted+=$(date +"%m/%d/%Y %H:%M:%S~") -d "$d"
done

现在$converted包含此字符串:

$ echo "$converted"
03/27/2014 00:00:00~08/24/2014 00:00:00~04/06/2014 00:00:00~
相关问题