在unix脚本中将变量转换为日期格式

时间:2015-06-03 09:44:57

标签: linux bash shell unix unix-timestamp

if [ -f $FILEPATH3 ]; then
#Will print the Header columns from properties file.
print $header >$CFILEPATH3
#To add rows in output file from input file .
awk -F\" 'BEGIN{OFS=FS;} {for(i=1;i<=NF;i=i+2){gsub(/,/,"~\t",$i);}}1' $FILEPATH3 > $TFILEPATH3

#Removes the footer,header and prints the columns as per mapping by picking column numbers from properties file 
cat $TFILEPATH3| sed '1d' | awk 'BEGIN { FS = "~\t"; OFS = ",";}{ DATE = date -d "$'$ms2'" "+%Y%m%d" } { printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n",  $'$ms1', $DATE,$'$ms3',$'$ms4',$'$ms5',$'$ms6',$'$ms7',$'$ms8’,”MS”,$’$ms10',$'$ms11',$'$ms12',$'$ms13',$'$ms14',$'$ms15',$'$ms16',$'$ms17'}' >> $CFILEPATH3

在上面的代码中,我试图将数据从输入文件复制到输出文件。 ms1,ms2是CSV输入文件的列位置。

ms2是格式 mm / dd / yyyy 的日期,被视为变量。我们需要将变量转换为 YYYYMMDD 格式并将其写入输出文件

在脚本中,我正在尝试将日期格式更改为 YYYYMMDD ..但我收到错误。

我认为错误来自此代码

{ DATE = date -d "$'$ms2'" "+%Y%m%d" }

1 个答案:

答案 0 :(得分:0)

您正尝试使用单引号访问该变量,并且不会发生这种情况,因此请尝试使用以下语法。

 DATE=$(echo $ms2|awk -F '/' '{print $3$2$1}')
cat $TFILEPATH3| sed '1d' | awk  -v ms2="$DATE" 'BEGIN { FS = "~\t"; OFS = ",";} { printf "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n",  $'$ms1', $ms2,$'$ms3',$'$ms4',$'$ms5',$'$ms6',$'$ms7',$'$ms8’,”MS”,$’$ms10',$'$ms11',$'$ms12',$'$ms13',$'$ms14',$'$ms15',$'$ms16',$'$ms17'}' >> $CFILEPATH3