我有一个看起来像
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,%sn",$day,"1","1",$1,array[1],array[2]}'> output.csv
但$day并没有使用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
$ 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
awk
不会理解shell变量。 您需要将它们传递给它:
awk -vdd="$day" -F "-" '{split($2,array," "); printf "%s,%s,%s,%s,%s,%sn",dd,"1","1",$1,array[1],array[2]}'
而且,与其说:
cat file | awk ...
避免无用地使用 cat:
awk file
with 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
我在子外壳中运行 while 循环只是为了保持对 IFS 的更改本地化。