makansij
makansij

Reputation: 9885

Printing date within awk

I'm trying to print the date inside of an awk command. I cannot find a way around the fact that the arguments for gawk are put inside single quotes, which negate the execution that I need for date:

gawk '/.*(ge|ga).*/  { print $1 "," $2 "," date } ' >> file.csv
gawk '/.*(ge|ga).*/  { print $1 "," $2 "," echo date } ' >> file.csv
gawk '/.*(ge|ga).*/  { print $1 "," $2 "," `date` } ' >> file.csv

What is a way around this inside the gawk command ? Thanks.

Upvotes: 1

Views: 6107

Answers (1)

Tom Fenech
Tom Fenech

Reputation: 74695

It's not 100% clear what you're trying to do here (some input and desired output would be useful) but I think this is what you want:

gawk -v date="$(date)" -v OFS=, '/g[ea]/ { print $1, $2, date }'

This sets an awk variable date based on the output of the date command and prints it after the first and second field. I've set the output field separator OFS to make your print command neater.

Alternatively (and probably preferred) is to use the strftime function available in GNU awk:

gawk -v OFS=, '/g[ea]/ { print $1, $2, strftime() }'

The format of the output is slightly different but can be adjusted by passing a format string to the function. See the GNU awk documentation for more details on that.

I have also simplified your regular expression, based on the suggestions made in the comments (thanks).

Upvotes: 5

Related Questions