Awk附加可变数字的现有CSV列

时间:2017-10-16 20:59:43

标签: bash csv awk

我知道如何将变量传递给awk,但在使用CSV时我无法将其与列号功能相结合。我也不确定如何以这种方式执行字符串连接。

我希望我的CSV中的某些列包含MM-dd-yyyyyyyy/MM/dd格式的日期,或者这些列的一些排列,并希望在其上添加默认hh:mm:ss,因此1/10/2017列成为1/10/2017 00:00:00。我尝试在awk中沿着这些行做一些事情,但它似乎没有认识到我试图引用的列。而且我认为这不是字符串连接的完成方式。

for file in *.csv; do
  headline=$(head -n 1 $file)
  byline=$(sed '2q;d' $file)
  IFS=', ' read -r -a headers <<< $headline  
  IFS=', ' read -r -a entries <<< $byline

  for i in "${!headers[@]}"; do                                 
    date='^[0-9]+[/-][0-9]+[/-][0-9]+$'

    if [[ ${entries[$i]} =~ $date ]] ; then                 
      awk -F, -v col='$i' '{$($col)+="00:00:00";}1' OFS=, $file  
    fi
  done
done

1 个答案:

答案 0 :(得分:1)

如果您提供了输入数据的最小可重复示例,那么回答您的问题会更容易。

在不知道数据的情况下,我假设你应该通过用以下内容替换你的awk命令来获得你正在寻找的东西:

awk -v col=$(($i + 1)) 'BEGIN{FS=", "} {print $col " 00:00:00"}' "$file"