我和这里的问题差不多.
我有一个包含aa ab aa ac aa ad等的数组.现在我想从这个数组中选择所有独特的元素.认为,这将是简单的用sort | uniq或sort -u因为他们在其他问题中提到,但没有在数组中改变...的代码是:
echo `echo "${ids[@]}" | sort | uniq`
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
是一个AWK新手,使用移植到Windows(GNXUtils)和gawk而不是awk的GNU实用程序.这个论坛上的解决方案就像绝对的魔术一样,我试图找到一个我可以阅读的来源,以更好地理解该解决方案中提供的模式表达.
在UNIX shell脚本中从列表中选择唯一值或不同值时, Dimitre Radoulov的答案提供以下代码
zsh-4.3.9[t]% awk '!_[$0]++' file
Run Code Online (Sandbox Code Playgroud)
作为选择具有重复和混杂元素的列表元素的解决方案,仅列出每个元素一次.
我以前曾经sort | uniq这样做过,这对小型测试文件很有用.对于我的实际问题(从2006年4月的印度国家证券交易所16天的档案订单研究数据中提取公司符号列表,在多个文件中提供了12,000多万条记录),分类负担变得过大.uniq只消除了相邻的重复项.
我使用了复制上面的Win-GNU gawk行
C:\Users\PAPERS\> cat ..\Full*_Symbols.txt | gawk "!_[$0]++" | wc -l
946
Run Code Online (Sandbox Code Playgroud)
建议有9,900多万条记录涉及946家不同的公司,这是一个非常合理的答案.在我的适度Windows机器上花了不到5分钟,经过几个小时的尝试SORT让我失望.
看了我所有的awk文本并在网上搜索了一下,而对于模式的一部分,为什么它工作的解释是明确的(!作为NOT,$0是整个当前记录),对于_我无法找到的下划线任何解释,并++在示例中仅作为"用1更新计数器".
将非常感谢任何适当的文本或网络参考,以充分理解这个例子,因为我认为它也将帮助我在其他相关的情况下.谢谢.最好,