加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 寻求参考以理解一种模式“!_ [$0]”

发布时间:2020-12-13 21:52:46 所属栏目:百科 来源:网络整理
导读:是一个AWK新手,使用移植到 Windows(GNXUtils)和gawk而不是awk的GNU实用程序.这个论坛上的解决方案就像绝对的魔术一样,我试图找到一个我可以阅读的来源,以更好地理解该解决方案中提供的模式表达. 在Select unique or distinct values from a list in UNIX she
是一个AWK新手,使用移植到 Windows(GNXUtils)和gawk而不是awk的GNU实用程序.这个论坛上的解决方案就像绝对的魔术一样,我试图找到一个我可以阅读的来源,以更好地理解该解决方案中提供的模式表达.

在Select unique or distinct values from a list in UNIX shell script,Dimitre Radoulov的答案提供以下代码

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

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

我以前用过sort | uniq这样做,适用于小型测试文件.对于我的实际问题(从2006年4月的印度国家证券交易所16天的档案订单研究数据中提取公司符号列表,在多个文件中有1.29亿条记录),分类负担变得太大了. uniq只消除了相邻的重复项.

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

C:UsersPAPERS&;  cat ..Full*_Symbols.txt | gawk "!_[$0]++"  | wc -l

946

这表明有1.29亿条记录涉及946家不同的公司,这是一个非常合理的答案.在我的适度Windows机器上花了不到5分钟,经过几个小时的尝试SORT让我失望.

看了我所有的awk文本并在网上搜索了一下,而对于模式的一部分,为什么它工作的解释是明确的(!作为NOT,$0是整个当前记录),对于下划线_我不是能够找到任何解释,并在示例中仅将其视为“以1更新计数器”.

将非常感谢任何适当的文本或网络参考,以充分理解这个例子,因为我认为它也将帮助我在其他相关的情况下.谢谢.最好,

真的很聪明!

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

我认为下划线只是一个“香草”变量名称(你需要一个名称为你的数组,下划线和猴子一样有效但更“匿名”.经典!

(编辑:李大同)

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

    推荐文章
      热点阅读