如何在Linux/Unix上使用awk打印文件名
时间:2020-01-09 10:39:33 来源:igfitidea点击:
如何在类似Linux/Unix的系统上使用awk打印文件名。
如何在awk的BEGIN部分中打印文件名?
我可以使用gawk/awk打印当前输入文件的名称吗?
在FILENAME变量中设置的当前输入文件的名称。
您可以使用FILENAME来显示或打印当前的输入文件名。
如果在命令行上未指定文件,则FILENAME的值为-(stdin)。
但是,除非由getline设置,否则在BEGIN规则中未定义FILENAME。
如何使用awk打印文件名
语法为:
awk '{ print FILENAME }' fileNameHere awk '{ print FILENAME }' /etc/hosts
您可能会逐行awk读取文件,多次看到文件名。
为避免此问题,请如下更新awk/gawk语法:
awk 'FNR == 1{ print FILENAME } ' /etc/passwd awk 'FNR == 1{ print FILENAME } ' /etc/hosts
如何在awk的BEGIN部分中打印文件名
使用以下语法:
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
输出示例:
/etc/hosts
但是,ARGV [1]可能并不总是有效。
例如:
ls -l /etc/hosts | awk 'BEGIN{print ARGV[1]} { print }'
因此,您需要对其进行如下修改(假设ls -l仅产生一行输出):
ls -l /etc/hosts | awk '{ print "File: " ", Owner:" ", Group: " }'
输出示例:
File: /etc/hosts, Owner:root, Group: roo
如何处理通配符指定的多个文件名
使用以下简单语法:
awk '{ print FILENAME; nextfile } ' *.c awk 'BEGIN{ print "Starting..."} { print FILENAME; nextfile }END{ print "....DONE"} ' *.conf
nextfile告诉awk停止处理当前输入文件。
读取的下一个输入记录来自下一个输入文件。