将当前日期插入文件的空列(字段)的位置

将当前日期插入文件的空列(字段)的位置

我有一个包含四列的文件,以“|”分隔如下

23414|test doc for me||
32322|test doc for you|2004_12_03|
13454|test doc for all||2010_11_01

我正在尝试将当前系统日期插入到空列中,以便输出应如下所示

23414|test doc for me|2018_04_03|2018_04_03
32322|test doc for you|2004_12_03|2018_04_03
13454|test doc for all|2018_04_03|2010_11_01

下面是我尝试过的代码

for file in `ls -rlt Added_to_* | awk '{print $9}'`
do
  now="$(date +'%Y/%m/%d')"
  echo "Running for: $file"
  awk -F'|' -v curr="$now" '{ 
    if( $3=="" || $4=="" ){ 
     if ( $3=="" ) { print "$curr"}
     if ( $4=="" ) { print "$curr"}
  }else  
     do_something ; 
  }' $file 
done

答案1

首先,根本不需要解析输出ls,甚至不需要使用 shell 循环 - 因为awk可以读取和处理文件列表。

另一个问题是你引用传递的变量的方式:$curr应该只是curr$curr指的是字段编号 curr- 如果这样的事情存在的话)。此外,无需两次测试字段是否为空。

所以

awk -v curr="$now" '
  BEGIN{OFS=FS="|";} {for(i=3;i<=4;i++) {if ($i=="") $i=curr}} {print}
' Added_to_*

答案2

我们使用lookbehind/lookahead正则表达式将发生替换的POI(感兴趣的位置)归零。到达那里后,我们使用Perl's内置函数放置当前日期localtime。第三、第四和第五字段是日/月/年信息,我们向其中添加所需的常量以获得今天的日期。我们在年份中添加1900, 到月份 1,以及 0 到日期,

perl -ple 's/\|\K(?=\||$)/join "_", map $_ + qw[1900 1 0][$a++%3], (localtime)[5,4,3]/eg'

答案3

sed ":a;s/|\(|\|$\)/|$(date +%Y_%m_%d)\1/;ta"

正如科斯塔斯所说

应该对你有帮助。

附言。对不起。看起来您没有使用双破折号进行分割。让我想想...

相关内容