我有一个看起来像
的文件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。
任何帮助都将不胜感激。
答案 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本地化的更改。