To print filename with awk

The syntax is:

awk '{ print FILENAME }' fileNameHere
awk '{ print FILENAME }' /etc/hosts

You might see file name multiple times as awk read file line-by-line. To avoid this problem update your awk/gawk syntax as follows:

awk 'FNR == 1{ print FILENAME } ' /etc/passwd
awk 'FNR == 1{ print FILENAME } ' /etc/hosts

To print filename in BEGIN section of awk

Use the following syntax:

awk 'BEGIN{print ARGV[1]}' fileNameHere
awk 'BEGIN{print ARGV[1]}{ print "someting or do something on data" }END{}' fileNameHere
awk 'BEGIN{print ARGV[1]}' /etc/hosts

However, ARGV[1] might not always work.

So you need to modify it as follows (assuming that ls -l only produced a single line of output):
ls -l /etc/hosts | awk '{ print "File: " $9 ", Owner:" $3 ", Group: " $4 }'

How to deal with multiple filenames specified by a wildcard

Use the following simple syntax:

awk '{ print FILENAME; nextfile } ' *.c
awk 'BEGIN{ print "Starting..."} { print FILENAME; nextfile }END{ print "....DONE"} ' *.conf
Was this answer helpful? 2 Users Found This Useful (18 Votes)