有一个命令可以打印出来自CSV文件的文件值范围:
date1var=mm/dd/yyyy hh:mm:ss
date2var=mm/dd/yyyy hh:mm:ss
awk -F, -v d1var="$date1var" -v d2var="$date2var" '$1 > d1var && $1 <= d2var {print $0 }' OFS=, plot_data.csv > graph1.csv
我猜测是否可以将我的变量包含在输出文件名中?
文件的最终名称应类似于:
graph_d1var-d2var.csv
有什么想法吗?
答案 0 :(得分:2)
让shell处理它:你在所有
之后开始使用shell变量date1var=mm/dd/yyyy hh:mm:ss
date2var=mm/dd/yyyy hh:mm:ss
awk -F, -v OFS=, -v d1var="$date1var" \
-v d2var="$date2var" \
'
# awk script is unchanged
' plot_data.csv > "graph1_${date1var}-${date2var}.csv"
答案 1 :(得分:1)
您可以将print
命令的输出重定向到文件名,例如:
awk -F, -v d1var="$date1_var" -v d2var="$date2var" '
$1 > d1var && $1 <= d2var {
print > ("graph_" d1var "-" d2var ".csv")
}'
OFS=, plot_data.csv
这使用d1var
和d2var
的值来创建输出文件的名称。如果您想要变量的名称,请用双引号括起整个名称。
答案 2 :(得分:1)
#!/bin/bash
date1var="1234"
date2var="5678"
awk -F, -v d1="$date1var" -v d2="$date2var" '{print > ("graph" d1 "-" d2 ".txt")}' OFS=, plot_data.csv
请注意,您无法像在尝试那样比较awk中的日期字符串。您也有一个拼写错误,因为您已使用下划线写了date1_var
,而您使用了date1var
而没有下划线。
我想简短的回答是,您可以使用print > "filename"
打印到指定文件,并且可以通过将字符串放在彼此旁边来连接(加入)字符串,如string2 = string1 "and" string3;