作家
登录

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

作者: 来源: 2018-03-29 02:04:37 阅读 我要评论

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

沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践!


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

应用 awk 打印文件名

Q:我想在 Linux / 类Unix 体系上应用 awk 打印文件名。 若何应用 awk 的 BEGIN 特别模式打印文件名? 我可以应用 gawk/awk 打印当前输入文件的名称吗?(LCTT 译注:读者最好能有一些 awk 的背景常识,不然浏览本文的时刻会有一些困惑)

应用语法如下:

http://s4.51cto.com/oss/201803/28/a0e31f4a0abeea7497afe7d3cac772e5.jpeg-wh_651x-s_378282020.jpeg

  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

应用 awk 的 BEGIN 特别规矩打印文件名

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

  1. awk 'BEGIN{print ARGV[1]}' fileNameHere
  2. awk 'BEGIN{print ARGV[1]}{ print "someting or do something> 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 }'
  1. ls -l /etc/hosts | awk '{ print "File: " $9 ", Owner:" $3 ", Group: " $4 }'

示例输出:

  1. File: /etc/hosts, Owner

      推荐阅读

      Java侵权案逆转:Google需赔88亿!

    沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践! 谷歌与 Oracle 之间的 Java 版权之争根本有了却不雅,谷歌因为在 Android 操作体系上应用了 Oracle 的 Java 版>>>详细阅读


    本文标题:如何在Linux/Unix上使用awk打印文件名

    地址:http://www.17bianji.com/lsqh/41006.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)