众多处理文本命令的综合应用
(1):统计特定文件中的词频
统计文件中使用单词的频率是一个经常用到的任务,在这里能够应用我们业已习得的文本处理技巧。词频统计的方法有很多种。先来看一个脚本:
运行结果如下:
工作原理:
egrep -o "\b[[:alpha:]]+\b" $filename 只用于输出单词。用-o 选项打印出由换行符分割的匹配字符序列。这样我们就可以在每行总列出一个单词。
\b是单词边界标记符,[:alpha:]是表示字母的字符类。awk命令用来避免对每一个单词进行迭代。因为awk默认会卓航执行{}块中的语句,所以我们就不需要再为同样的事编写循环了。借助关联数组,当执行count[$0]++时,单词计数增加。最后,在END{} 语句块中通过迭代所有的单词,就可以打印出单词及它们各自出现的次数。
(2)按列合并多个文件
很多时候我们需要按列拼接文件,比如要将每一个文件的内容作为单独的一列。而cat命令所实现的拼接通常是按照行来进行的。
这里我们是使用paste命令按列是先拼接,其语法如下:
$ paste file1 file2 file2 file3...
来看例子:
默认的定界符是制表符,也可以用-d明确指定定界符,例如:
(3)打印文件或行中的第n个单词或列
我们可能有一个包含了多列数据的文件,不过只有其中的一小部分能派上用场。例如在以成绩排序的学生列表中,我们希望得到成绩最高的四名学生。来看看如何实现。
处理这种任务最广泛的方法就是借助awk。同样也可以使用cut来实现
(a)用下面的命令打印第5列:
$ awk '{print $5}' filename
(b) 也可以打印多列数据,并在各列间插入指定的字符串.
如果要打印当前目录下各文件的权限和文件名。可以使用下列命令: