如何在awk中跳过目录?

2023-11-24

假设我有以下文件和目录结构:

$ tree
.
├── a
├── b
└── dir
    └── c

1 directory, 3 files

也就是两个文件a and b与目录一起dir,其中另一个文件c stands.

我想处理所有文件awk (GNU Awk 4.1.1,确切地说),所以我做了这样的事情:

$ gawk '{print FILENAME; nextfile}' * */*
a
b
awk: cmd. line:1: warning: command line argument `dir' is a directory: skipped
dir/c

一切都很好,但是*也扩展到目录dir and awk尝试处理它。

所以我想知道:是否有任何本地方式awk可以检查给定元素是否是文件,如果是,则跳过它?也就是说,不使用system() for it.

我通过调用外部使其工作system in 起始文件:

$ gawk 'BEGINFILE{print FILENAME; if (system(" [ ! -d " FILENAME " ]")) {print FILENAME, "is a dir, skipping"; nextfile}} ENDFILE{print FILENAME, FNR}' * */*
a
a 10
a.wk
a.wk 3
b
b 10
dir
dir is a dir, skipping
dir/c
dir/c 10

Note also the fact that if (system(" [ ! -d " FILENAME " ]")) {print FILENAME, "is a dir, skipping"; nextfile} works counter intuitively: it should return 1 when true, but it returns the exit code.

我读到A.5 gawk 中的扩展 POSIX awk 中没有的扩展:

  • 命令行上的目录会产生警告并被跳过(请参阅命令行目录)

然后链接页面显示:

4.11 命令行上的目录

根据 POSIX 标准,在 awk 命令行上命名的文件 必须是文本文件;如果不是,那就是致命错误。大多数版本 awk 将命令行上的目录视为致命错误。

默认情况下,gawk 会针对命令中的目录生成警告 线,但否则忽略它。这使得使用 shell 更加容易 awk 程序中的通配符:

$ gawk -f whizprog.awk *        Directories could kill this program

如果给出了 --posix 或 --traditional 选项,则 gawk 恢复为将命令行上的目录视为致命错误。

See 扩展示例 Readdir,一种将目录视为可用的方法 来自 awk 程序的数据。

事实上,情况确实如此:与之前相同的命令--posix fails:

$ gawk --posix 'BEGINFILE{print FILENAME; if (system(" [ ! -d " FILENAME " ]")) {print FILENAME, "is a dir, skipping"; nextfile}} ENDFILE{print FILENAME, NR}' * */*
gawk: cmd. line:1: fatal: cannot open file `dir' for reading (Is a directory)

我检查了16.7.6 Reading Directories上面链接的部分,他们谈论readdir:

readdir 扩展添加了目录的输入解析器。用途 如下:

@加载“读目录”

但我既不知道如何调用它,也不知道如何从命令行使用它。


我只是避免将目录传递给 awk,因为即使 POSIX 也说所有文件名参数必须是文本文件。

您可以使用find用于遍历目录:

find PATH -type f -exec awk 'program' {} +
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在awk中跳过目录? 的相关文章

随机推荐

  • 致命错误:gnu/stubs-soft.h:没有这样的文件或目录

    我在 64 位 Ubuntu 16 04 上针对 32 位 Cortex A9 平台交叉编译 helloworld 程序时遇到以下错误 make usr local comp poky 1 7 sysroots x86 64 pokysdk
  • 画布画不出平滑的线条

    在 javafx canvas 中徒手绘制时 我无法获得反锯齿线 以下是代码 import javafx application import javafx event import javafx scene import javafx s
  • 如何在winform中显示DataGridViewComboBoxCell值的设置默认值?

    我有一个DataGridView有一个DataGridViewComboBoxColumn我已经填充了该组合框 但在清除之后DataGridView我必须为该组合框设置一个默认值 所以请帮助我 我知道这是一篇古老的帖子 但希望我可以帮助一些
  • Reporting Services - 根据报表参数隐藏表列

    我在 Reporting Services 2005 中有一个报表 我想根据报表参数隐藏或显示单个表列 有谁知道如何做到这一点 Thanks 使用列的可见性属性 这对我有用 iif Parameters ParameterName Valu
  • 发布asp.net Web API后ASP.NET MVC框架的未来是什么

    我已经使用 ASP NET MVC 大约 1 5 年了 很享受它的功能 并且部署了许多成功的 Web 应用程序 但我目前正在阅读有关 ASP NET Web API 技术的内容 而且 我发现以下内容 我可以实现以前使用 MVC 实现的任何功
  • 通过通用类型参数访问属性

    我正在尝试为我的模型创建一个通用存储库 目前我有 3 个不同的模型 它们之间没有关系 联系人 注释 提醒 class Repository
  • bootstrap 中的 7 个相等的列

    我想知道是否有人可以解释如何在 bootstrap 中获得 7 个相等的列 我正在尝试制作日历 这段代码似乎做了5件事 div class row gt div class col md 2 col md offset 1 div div
  • 使用 openssl 以编程方式提取 pem 证书信息

    使用 openssl 命令行可以以人类可读的模式提取 pem 证书中包含的所有信息 那是 openssl x509 noout in
  • RecyclerView 概念如何在 Android 上运行?

    我使用 RecyclerView 和 CardView 从网站上获取教程创建了一个基本应用程序 应用程序工作正常 但我有一些困惑 我在这里展示我的整个代码 令人困惑的是代码如何一步一步地工作 所以请澄清我对此的概念 我的应用程序的基本结构
  • CakePHP - 如何使用 slug 进行反向路由?

    我正在使用 CakePHP 1 3 我有一个产品模型 在数据库表上有id and slug fields 如果我有一个产品id 37 and slug My Product Title我希望产品的 URL 为 产品 37 我的产品标题 而不
  • Javascript 中的套接字服务器(在浏览器中)?

    我希望允许用户在我正在开发的多人游戏中玩 p2p 但为了能够做到这一点 javascript 需要能够在浏览器中创建套接字服务器 这可能吗 我不知道有什么 API 可以让客户端在 javascript 中连接到其他客户端 还有其他办法吗 喜
  • 如何在eclipse本地安装jdt.core?

    我需要在本地安装 eclipse JDT Core 插件 例如使用 site xml 等下载文件 而不是由于工作中可怕的防火墙而远程安装它 谁能建议在哪里下载它以便我可以进行本地安装 谢谢 我假设您正在使用 Aptana 就像 VonC 所
  • 如何在 Eclipse 中添加 XML 可绘制对象

    好吧 伙计们 我在这里有点堆积 根据官方文档 Google 表示 一旦您在 XML 中定义了 Drawable 请将文件保存在项目的 res drawable 目录中 是将 XML 可绘制对象添加到项目中的方法 但是当我创建项目时 ADT
  • 与/外键引用映射多对多关系

    对于精通 EF 用户来说 这应该是一个简单的问题 我 在我的脑海中 有以下表之间关系的模式 FooBar Foo Bar FooId PK FK Id PK Id PK BarId PK FK BarId FK Name IsRead Na
  • decltype( constexpr 变量)

    为什么 constexpr 变量的 decltype 失败 include
  • 跨平台 Xamarin Forms 的 UserControl

    我已经寻找了很长时间 但仍然没有找到一种方法来为跨平台 Xamarin Forms 创建像 UserControls 这样的 WPF 这还可以吗 我将 Xamarin 与 Visual Studio 2013 结合使用 这是一个 XAML
  • Emacs,如何更改 M-x shell 中的某些颜色?

    我使用 Emacs 24 并希望在 shell 模式下更改目录和文件的颜色 ls命令 理想情况下 取决于文件的权限 我怎样才能做到这一点 我尝试玩 setq ansi color names vector black red green y
  • 如何比较 SQL Server 中的日期时间与仅日期

    Select from User U where U DateCreated 2014 02 07 但在数据库中创建了用户2014 02 07 12 30 47 220当我只放 2014 02 07 它不显示任何数据 不要试图做这样的事情
  • 为什么 boost::is_same::value 等于 false?

    我正在努力通过 C 模板元编程 作者 Abrahams 和 Gurtovoy 这实际上并不在第二章中 而是我在第一个练习 2 10 2 0 中尝试过的 这让我感到困惑 include
  • 如何在awk中跳过目录?

    假设我有以下文件和目录结构 tree a b dir c 1 directory 3 files 也就是两个文件a and b与目录一起dir 其中另一个文件c stands 我想处理所有文件awk GNU Awk 4 1 1 确切地说 所