要以日期格式MMYYYY将日期放在空白列中

时间:2018-04-04 08:24:36

标签: linux bash awk

如果第1列为空,我试图将日期放在列中。所以尝试下面的代码,但没有工作。这里输入文件是管道分隔的,所以需要输出管道分开

代码1

if ($1=="") {$1="date +%m%Y"}

代码2

if ($1=="") {$1=`date +%m%Y`}

代码3

if ($1=="") {$1=("Time = %m%Y", systime());}

必需的输出

|042018|

示例输入

ourceIifier|SourleName|GntCode|Dision|Suvision|ProfitCe1|Profie2|Plade|Retuiod|SuppliN
SAP|SAP_OSR_INV||||||||08AAACT2T|

预期的输出

ourceIifier|SourleName|GntCode|Dision|Suvision|ProfitCe1|Profie2|Plade|Retuiod|SuppliN
SAP|SAP_OSR_INV|||||||042018|08AAACT2T|

我的代码:

awk -F"|" -v OFS="|" 'NR>1{
if (match($14,/[0-9]+\.[0-9]+\.[0-9]{4}$/)) {
split ($14, mdy, ".");
$14 = sprintf ("%02d-%02.f-%02.f", substr(mdy[3],0,4), mdy[1], mdy[2]);
if ($1=="") {$1="SAP"}
if ($2=="") {$2="SAP_OSR_INV"}
if ($9=="") {$9="date +%m%Y"}
if ($26 ~ /^[0-9]$/) {$26=sprintf("%02.f",$26)}
if ($58~/^1000$/) {$10="27AAACT2438A1ZT";}}1' input.csv > output.csv

这里是第9栏($ 9)声明" if($ 9 ==""){$ 9 =" date +%m%Y"}"我想把日期。

2 个答案:

答案 0 :(得分:2)

您忘记输出结果并且未正确获取日期,此工作正常:

awk -v date="$(date +"%m%Y")" '$1=="" {$1=date} {print $0}'

答案 1 :(得分:1)

如果你的awk是gawk(GNU),为了避免子shell中的外部命令:

$1=strftime("%m%d%y")

以及strftime的systime需要gawk
(仅用mawk& original-awk测试过)