正则表达式 – 寻求参考以理解一种模式“!_ [$0]”
是一个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且不打印任何内容. 我认为下划线只是一个“香草”变量名称(你需要一个名称为你的数组,下划线和猴子一样有效但更“匿名”.经典! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |