将单个日期添加到文件的第一列

时间:2014-02-07 17:54:30

标签: bash awk

我有一个看起来像

的文件
1234-00AA12 .02
5678-11BB34 .03

在bash脚本中,我有一个像

这样的表达式

天= $(...)

以格式YYYY / MM / DD格式化日期(如果这很重要),让我们说2014/01/21的特异性。

我想制作以下内容:

2014/01/21,1,1,1234,00AA12,.02
2014/01/21,1,1,5678,11BB34,.03

(第一列是日,第二列和第三列固定为“1”)。

经过一段谷歌搜索后我尝试了:

cat file|awk -F "-" '{split($2,array," "); printf "%s,%s,%s,%s,%s,%s\n",$day,"1","1",$1,array[1],array[2]}'> output.csv

但$ day无法使用awk。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:1)

试试这个awk:

awk -v d=$(date '+%Y/%m/%d') '{print d,1,1,$1,$2}' OFS=, file
2014/02/07,1,1,1234-00AA12,.02
2014/02/07,1,1,5678-11BB34,.03

答案 1 :(得分:1)

$ awk -v day="$day" 'BEGIN{FS="[ -]";OFS=","} {print day,1,1,$1,$2,$3}' file
2014/01/21,1,1,1234,00AA12,.02
2014/01/21,1,1,5678,11BB34,.03

答案 2 :(得分:0)

awk无法理解shell变量。你需要将它们传递给它:

awk -vdd="$day" -F "-" '{split($2,array," "); printf "%s,%s,%s,%s,%s,%s\n",dd,"1","1",$1,array[1],array[2]}'

而且,而不是说:

cat file | awk ...

避免无用的猫:

awk file

答案 3 :(得分:0)

使用bash

day="2014/01/21"
(
    IFS=,
    while IFS=" -" read -ra fields; do 
        new=( "$day" 1 1 "${fields[@]}" )
        echo "${new[*]}"
    done < file
)
2014/01/21,1,1,1234,00AA12,.02
2014/01/21,1,1,5678,11BB34,.03

我在子shell中运行while循环只是为了保持对IFS本地化的更改。