寻求参考来理解一种模式“!_[$0]++”

2024-03-10

我是 AWK 新手,使用移植到 Windows (UNXUtils) 的 GNU 实用程序和 gawk 而不是 awk。该论坛上的解决方案的工作原理如下绝对的魔法,并且我正在尝试找到一个可以阅读的来源,以更好地理解该解决方案中提供的模式表达式。

In 从 UNIX shell 脚本中的列表中选择唯一或不同的值 https://stackoverflow.com/questions/618378/select-unique-or-distinct-values-from-a-list-in-unix-shell-scriptDimitre Radoulov 的回答提供了以下代码

zsh-4.3.9[t]%   awk '!_[$0]++' file

作为选择具有重复和混乱元素的列表中的元素的解决方案,仅列出每个元素一次。

我以前用过sort | uniq这样做,这对于小型测试文件来说效果很好。对于我的实际问题(从 2006 年 4 月印度国家证券交易所历时 16 天的档案订单簿研究数据中提取公司代码列表,多个文件中有 1.29 亿条记录),排序负担变得太大了。而uniq只是消除相邻的重复项。

为我的 Win-GNU gawk 复制上面的行,我使用

C:\Users\PAPERS\>  cat ..\Full*_Symbols.txt | gawk "!_[$0]++"  | wc -l

946

表明超过 1.29 亿条记录属于 946 个不同的公司,这是一个非常合理的答案。在我的普通 Windows 机器上花了不到 5 分钟的时间,经过几个小时的尝试排序让我筋疲力尽。

查看了我拥有的所有 awk 文本并在网上进行了一些搜索,而对于部分模式,其工作原理的解释很清楚(!用作 NOT,$0是整个当前记录),对于下划线_我找不到任何解释,并且已经看到++在示例中仅作为“将计数器更新 1”。

将不胜感激任何适当的文本或网络参考来充分理解这个例子,因为我认为它也会对我在其他相关案例中有所帮助。谢谢。最好的,


真的是非常非常聪明啊!

它创建一个关联数组(意味着“索引”可以是任何内容,而不仅仅是数字)。如果元素不存在(为零),则创建它(通过递增它),并且当存在匹配时awk执行默认操作(即打印输入行)。一旦找到该值,_[$0]将为非零,因此如果再次遇到相同的值,则表达式为 false 并且不会打印任何内容。

我认为下划线只是一个“普通”变量名称(您需要一个数组名称,下划线与monkey但更“匿名”。 经典!

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

寻求参考来理解一种模式“!_[$0]++” 的相关文章

随机推荐

  • 存储过程、MySQL 和 PHP

    这是一个相当开放的问题 我已经在 MS SQLServer 中使用存储过程以及经典 ASP 和 ASP net 一段时间了 并且非常喜欢它们 我正在从事一个小型爱好项目 由于各种原因 我选择了 LAMP 路线 有什么提示 技巧 陷阱或良好的
  • 例如,C++0x auto 关键字的含义是什么?

    auto a Foo
  • 将320x240x3点云矩阵转换为320x240x1深度图

    有人可以用Python帮我解决以下问题吗 我有从虚拟相机获得的点云矩阵 其尺寸为 320x240x3 表示每个点 相机视图中的点 的 x y z 坐标 所有值的范围都从负到正 如何将此点云矩阵转换为存储每个像素的正深度值的 320x240x
  • 在 Swift 3 中使用选择器

    我正在用 Swift 3 编写我的 iOS 应用程序 我有一个UIViewController扩展 我必须检查控制器实例是否响应方法 下面是我尝试的代码 extension UIViewController func myMethod if
  • 如何使用 WorkManager 更改定期工作请求周期而不立即运行?

    val request PeriodicWorkRequestBuilder
  • 使用R的lm(),公式对象应该作为字符传递?

    我发现 R 使用 lm 时有一个奇怪的行为 基于cars对象 以下函数是在速度 30 时使用局部线性回归绘制拟合断裂距离 func1 lt function fm spd w lt dnorm cars speed spd sd 5 fit
  • Jenkins 与 intellij 共享库

    我开始实现 Jenkins 共享库并尝试使用 intellij 作为我的 ide 编写我的 jenkinsfile 如何从共享 lib 存储库获取函数到其中包含 jenkins 文件的其他存储库 只是为了澄清从 jenkins 运行时对我有
  • 查找数组的第一个重复项

    我决定学习 python 并使用 CodeFight 进行训练 第一个面试练习是找到数组的第一个重复项并返回它 如果没有则返回 1 这是我写的代码 def firstDuplicate a b print len a for i in ra
  • 当两个命令都存在时,在 jupyter 中使用“%”比使用“!”有优势吗?

    例如当我使用 pip install VSCode 建议我使用 pip install 同样有一个版本mv对彼此而言 and 使用其中一种比另一种有优势吗 Yes pip在大多数边缘情况下 将正确解析适当的虚拟环境 当前内核使用的虚拟环境
  • 如何在 Spring WebClient 中一次设置多个标头?

    我试图为我的其余客户端设置标头 但每次我都必须写 webclient get uri blah blah header key1 value1 header key2 value2 如何使用 headers 方法同时设置所有标头 如果这些标
  • Cloudinary api - 解决承诺

    我想编写一个函数 返回一个布尔值 指示我的 Cloudinary 空间中是否已存在具有指定 public id 的图像 我可以使用以下代码将结果记录到控制台 function isUploaded public id cloudinary
  • 不可能的布局?

    我开始认为这是不可能的 但我想我会问你们 基本上它是一个 2 列布局 但 业务 需要以下内容 始终占据整个浏览器窗口 适应浏览器窗口大小的调整 左栏的宽度是固定的 但该宽度在不同页面上应该是灵活的 左列顶部有一个固定高度的区域 左栏有一个底
  • 所有 mysql 引擎之间的主要区别是什么?

    我想总结一下所有 Mysql 引擎之间的主要区别 当然也包括最流行的引擎 我应该使用什么标准来确定使用哪个引擎 这里对它们进行了很好的描述 http dev mysql com doc refman 5 0 en storage engin
  • 如何更改 tcsh 提示符以显示当前工作目录?

    我在用tcsh我正在寻找一种响应式工作目录 我至少想显示最后一个文件夹名称而不是获取完整路径 想象我当前的工作目录是 user hostname home us Desktop my projects 然后我想显示这样的提示 user ho
  • 获取 Librosa 中与 STFT 相关的频率

    使用时librosa stft 要计算频谱图 如何获取相关的频率值 我对生成图像不感兴趣 如librosa display specshow 而是我希望掌握这些价值观 y sr librosa load recordings high pi
  • Azure 媒体播放器无法在 iPhone 上使用 AES 保护

    我们在 iPhone 6 A1586 上播放受 AES 使用 JWT 令牌身份验证 保护的视频时遇到问题 欠费错误如下 0x50300000 视频播放因损坏问题而中止 或者因为视频使用了您的浏览器不支持的功能 禁用加密后 播放相同的视频不会
  • Google 脚本可跨多个工作表工作

    我是 Google 脚本的新手 所以如果这个问题已经得到解答 我深表歉意 我有一个包含多个工作表的电子表格 其中一些工作表上有一个状态列 使用我已经发现的代码 我可以根据状态列中单元格中的值设置整个行颜色 我遇到的问题是我只能让代码在一张纸
  • 有效查询合并2个以上子查询

    我有一个数据库 books primary key bookID characterNames foreign key books bookID locations foreign key books bookID 角色名称和位置的文本位置
  • 我可以在批处理文件中使用多少个变量

    我有点好奇我可以在批处理文件中设置多少个变量 我这里有一个小脚本 ECHO OFF SETLOCAL EnableDelayedExpansion FOR L P IN 1 1 2147483647 DO SET Foo P P ECHO
  • 寻求参考来理解一种模式“!_[$0]++”

    我是 AWK 新手 使用移植到 Windows UNXUtils 的 GNU 实用程序和 gawk 而不是 awk 该论坛上的解决方案的工作原理如下绝对的魔法 并且我正在尝试找到一个可以阅读的来源 以更好地理解该解决方案中提供的模式表达式