加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- AI行业应用、大数据、建站、语音技术、研发安全!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

如何在 Linux / Unix 上使用 awk 打印文件名 | Linux 中

发布时间:2023-05-24 00:36:17 所属栏目:Unix 来源:转载
导读:
我想在 Linux / 类Unix 系统上使用 awk 打印文件名。 如何使用 awk 的 BEGIN 特殊模式打印文件名?-- Vivek Gite
有用的原文链接请访问文末的“原文链接”获得可点击的文内链接、全尺寸原

unix环境高级编程_unix_unix打印

我想在 Linux / 类Unix 系统上使用 awk 打印文件名。 如何使用 awk 的 BEGIN 特殊模式打印文件名?-- Vivek Gite

有用的原文链接请访问文末的“原文链接”获得可点击的文内链接、全尺寸原图和相关文章。致谢编译自|

作者|Vivek Gite

译者|amwps290 共计翻译:10篇 贡献时间:51 天

Q:我想在 Linux / 类Unix 系统上使用 awk 打印文件名。 如何使用 awk 的BEGIN特殊模式打印文件名? 我可以使用 gawk/awk 打印当前输入文件的名称吗?(LCTT 译注:读者最好能有一些 awk 的背景知识,否则阅读本文的时候会有一些困惑)

在FILENAME变量中存放着当前输入文件的名称。 您可以使用FILENAME显示或打印当前输入文件名,如果在命令行中未指定文件,则FILENAME的值为-(标准输入)(LCTT 译注:多次按下回车键即可看到效果)。 但是,除非由getline设置,否则FILENAME在BEGIN特殊模式中未定义。

使用 awk 打印文件名

使用语法如下:

  1. awk '{ print FILENAME }' fileNameHere

  2. awk '{ print FILENAME }' /etc/hosts

因 awk 逐行读取文件,因此,你可能看到多个文件名,为了避免这个情况,你可以使用如下的命令:(LCTT 译注:FNR表示当前记录数,只在文件中有效)

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

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

unix环境高级编程_unix_unix打印

使用 awk 的 BEGIN 特殊规则打印文件名

使用下面的语法:(LCTT 译注:ARGV[I]表示输入的第 i 个参数)

  1. awk 'BEGIN{print ARGV[1]}' fileNameHere

  2. awk 'BEGIN{print ARGV[1]}{ print "someting or do something on data" }END{}' fileNameHere

  3. awk 'BEGIN{print ARGV[1]}' /etc/hosts

示例输出:

  1. /etc/hosts

然而,ARGV[1]并不是每一次都能奏效,例如:

  1. ls -l /etc/hosts | awk 'BEGIN{print ARGV[1]} { print }'

你需要将它修改如下(假设ls -l只产生一行输出):

  1. ls -l /etc/hosts | awk '{ print "File: " $9 ", Owner:" $3 ", Group: " $4 }'

示例输出:

  1. File: /etc/hosts, Owner:root, Group: root

处理由通配符指定的多个文件名

使用如下的示例语法:

  1. awk '{ print FILENAME; nextfile } ' *.c

  2. awk 'BEGIN{ print "Starting..."} { print FILENAME; nextfile }END{ print "....DONE"} ' *.conf

示例输出:

  1. Starting...

  2. blkid.conf

  3. cryptconfig.conf

  4. dhclient6.conf

  5. dhclient.conf

  6. dracut.conf

  7. gai.conf

  8. gnome_defaults.conf

  9. host.conf

  10. idmapd.conf

  11. idnalias.conf

  12. idn.conf

  13. insserv.conf

  14. iscsid.conf

  15. krb5.conf

  16. ld.so.conf

  17. logrotate.conf

  18. mke2fs.conf

  19. mtools.conf

  20. netscsid.conf

  21. nfsmount.conf

  22. nscd.conf

  23. nsswitch.conf

  24. openct.conf

  25. opensc.conf

  26. request-key.conf

  27. resolv.conf

  28. rsyncd.conf

  29. sensors3.conf

  30. slp.conf

  31. smartd.conf

  32. sysctl.conf

  33. vconsole.conf

  34. warnquota.conf

  35. wodim.conf

  36. xattr.conf

  37. xinetd.conf

  38. yp.conf

  39. ....DONE

nextfile告诉 awk 停止处理当前的输入文件。 下一个输入记录读取来自下一个输入文件。 更多信息,请参见 awk/gawk[1]命令手册页:

  1. man awk

  2. man gawk

关于作者

作者是 nixCraft 的创立者,也是经验丰富的系统管理员和 Linux/Unix shell 脚本的培训师。 他曾与全球各行各业的客户合作,涉及 IT,教育,国防和空间研究以及非营利部门等多个行业。 您可以在Twitter[2],Facebook[3]和Google+[4]上关注他。 可以通过订阅我的RSS[5]来获取更多的关于系统管理,Linux/Unix ,和开源主题的相关资料。

via:

作者:Vivek Gite[7]译者:amwps290校对:wxy

本文由LCTT原创编译unix打印,Linux中国荣誉推出

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章