Boris Kuryshev
Boris Kuryshev

Reputation: 33

How to include variable to output filename using awk

There is a command which prints out to file range of values from CSV file:

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

I'm just guessing if it's possible to include my variables to the output filename?

Final name of the file should be similar to:

graph_d1var-d2var.csv

Any ideas?

Upvotes: 2

Views: 6198

Answers (3)

glenn jackman
glenn jackman

Reputation: 246754

Let the shell handle it: you're starting with shell variables after all

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"

Upvotes: 2

Mark Setchell
Mark Setchell

Reputation: 207405

#!/bin/bash
date1var="1234"
date2var="5678"
awk -F, -v d1="$date1var" -v d2="$date2var" '{print > ("graph" d1 "-" d2 ".txt")}' OFS=, plot_data.csv

Note that you can't compare date strings in awk like you are trying to do. You also have a typo, in that you have written date1_var with an underscore whereas you have used date1var without an underscore further on.

I guess the short answer is that you can print to a named file with print > "filename" and that you can concatenate (join) strings by placing them beside each other like this string2 = string1 "and" string3;

Upvotes: 1

Birei
Birei

Reputation: 36262

You can redirect the output of print command to a file name, like:

awk -F, -v d1var="$date1_var" -v d2var="$date2var" '
    $1 > d1var && $1 <= d2var {
        print > ("graph_" d1var "-" d2var ".csv") 
    }' 
OFS=, plot_data.csv

This uses the values of d1var and d2var to create the name of the output file. If you want the name of the variables, surround the whole name in double quotes.

Upvotes: 2

Related Questions