我非常喜欢使用control+r递归搜索命令历史记录。我发现了一些喜欢使用的不错的选择: # ignore duplicate commands, ignore commands starting with a space export HISTCONTROL=erasedups:ignorespace # keep the last 5000 entries export HISTSIZE=5000 # append to the history instead of overwriting (good for multiple connections) shopt -s histappend 对我来说,唯一的问题是erasedups仅擦除连续的重复项-因此使用以下命令字符串: ls cd ~ ls 该ls命令实际上将被记录两次。我考虑过定期运行cron: cat .bash_history | sort | uniq > temp.txt …
这种单行代码无需预先排序即可从文本输入中删除重复的行。 例如: $ cat >f q w e w r $ awk '!a[$0]++' <f q w e r $ 我在互联网上找到的原始代码为: awk '!_[$0]++' 这让我更加困惑,因为我_在awk中有特殊的含义,就像在Perl中一样,但事实证明,这只是数组的名称。 现在,我了解了单线背后的逻辑: 每条输入行都用作哈希数组中的键,因此,完成后,哈希按到达顺序包含唯一的行。 我想学习的是awk如何准确地解释此表示法。例如,爆炸符号(!)的含义以及此代码段的其他元素。 它是如何工作的?
我今天遇到了这个用例。乍一看似乎很简单,但是随便摆弄sort,uniq,sed并awk透露,这是平凡的。 如何删除所有 成对的重复行?换句话说,如果给定行的重复数为偶数,则将其全部删除;如果重复行数为奇数,请删除除一行以外的所有行。(可以假设输入是排序的。) 干净优雅的解决方案是可取的。 输入示例: a a a b b c c c c d d d d d e 输出示例: a d e