linux - 在Unix脚本中将变量转换为日期格式

标签 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" }

最佳答案

您正在尝试使用单引号访问变​​量,但不会发生,因此,请尝试使用以下语法。

 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

关于linux - 在Unix脚本中将变量转换为日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616469/

相关文章:

linux - 如何在 bash 中修改命令的实时详细输出?

regex - sed 在特定匹配行的末尾附加一些内容

regex - native bash 正则表达式 [[ $f =~ "^[^\.]+$"]] 从不匹配

bash - 如何在错误时中断 bash 管道?

linux - 如何将查找的输出分配到数组中

linux - npm 安装失败

linux - 获取linux中每个设备的内存映射

linux - "not running as user lfs, you should be"错误

linux - `environ` 结束后是什么?

linux - bash - wget -N if else 值检查