难度:4;预计完成时间:1小时
[info] 正则表达式和grep
统计words文件 (
/usr/share/dict/words
) 中包含至少三个a
且不以's
结尾的单词个数。
解决这个问题,首先需要把两个条件的数据整理出来,整理的办法可以近似地认为是Linux的管道,首先把文件输出出来,用grep命令进行筛选。 还有一个问题,就是如何表示三个a呢,我们可以把单词拆成四个部分,前面三个部分都是若干个非a字母加上一个a,最后一个部分是任意的。 统计的方法可以参考Linux的wc指令。大小写的处理可以参考tr命令。
[info] awk与单行脚本
计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍)
awk '{ x += $3 } END { print x }' myfile
尝试去运行这个脚本,分析脚本运行的原因
下面的不是题目,是一个信息,同学们可以自行阅读。
[info] 文本处理
计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍) 当你需要对文本文件做集合交、并、差运算时,sort 和 uniq 会是你的好帮手。具体例子请参照代码后面的,此处假设 a 与 b 是两内容不同的文件。这种方式效率很高,并且在小文件和上 G 的文件上都能运用(注意尽管在 /tmp 在一个小的根分区上时你可能需要 -T 参数,但是实际上 sort 并不被内存大小约束),参阅前文中关于 LC_ALL 和 sort 的 -u 参数的部分。
sort a b | uniq > c # c 是 a 并 b
sort a b | uniq -d > c # c 是 a 交 b
sort a b b | uniq -u > c # c 是 a - b
来源于 link