学习shell编程有十几个原因.其中一个主要原因是系统管理.
有人需要根据同一目录中的另一个文件重新命名〜750个文件.这是用3行shell脚本完成的.要获得更多的例子,只需使用标签[bash],[sed] or [awk]搜索问题.
当有人要求我向他们展示一个很好的“shell编程”的例子时,我总是向他们展示这个awk 1行(甚至是一个1字)?它将过滤列表以仅显示唯一值而不更改原始顺序.这很重要,因为大多数其他解决方案要求您首先对列表进行排序,从而破坏原始顺序.
$echo -e "apple\npear\napple\nbanana\nmango\npear\nbanana" | awk '!a[$0]++' apple pear banana mango
awk命令说明
非排序独特的魔法发生在!a [$0].由于awk支持关联数组,它使用当前记录(aka行)$0作为数组a []的键.如果以前没有看到该键,则[$0]计算为0(零),这是未设置索引的awk默认值.然后,我们在该键的第一次出现时取消此值返回TRUE. a [$0]然后递增,以便此键上的后续命中将返回FALSE,因此不会打印重复值.我们还利用这样一个事实:如果一个表达式返回TRUE并且没有给出进一步的{commands},那么awk将默认打印$0(打印当前记录/行).
如果你仍然不明白,别担心,这是一个非常简洁和优化的版本,可能是一个更长的awk脚本.