如何使用awk将变量包含到输出文件名中

时间:2014-07-27 18:15:33

标签: shell awk

有一个命令可以打印出来自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

有什么想法吗?

3 个答案:

答案 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

这使用d1vard2var的值来创建输出文件的名称。如果您想要变量的名称,请用双引号括起整个名称。

答案 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;