测试数据 hello.txt
|
|
shell wordcount
|
|
步骤详解
按分割符处理成行
tr ‘ ‘ ‘\n’ #将空格换成换行符,linux很多工具都是针对行的
替换指定的字符
tr [options] string1 string2
tr通常带有两个参数:string1 和 string2 ,当tr发现与string1中有匹配的字符时,它将使用string2中对应的字符来替换输入中的字符
选项 | 说明 |
---|---|
-c | 对string1取反,使得tr匹配除了在string1中出现的所有字符 |
-d | 删除与string1中制定的字符匹配的字符 |
示例:1234$ echo abcdef | tr 'abcdef' 'xyzabd'xyzabd$ echo abcdef | tr 'a-f' 'x-za-c'xyzabc
分割之后排序(这一步是必须的,uniq是根据连续重复的行统计的)
sort -k 1 #根据第一列内容排序
统计并显示次数
uniq [选项] 文件
uniq -c
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。
选项 | 说明 |
---|---|
-c | 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项 |
-d | 只显示重复行 |
-u | 只显示文件中不重复的各行 |
调换列的位置
awk ‘{print $2”\t”$1}’ # 调换列的位置并以tab键分割显示
根据频率逆序排列
sort -k2 -nr
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
选项 | 说明 |
---|---|
-u | 在输出行中去除重复行。 |
-r | sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。 |
-o | 由于sort默认是把结果输出到标准输出,如果你想把排序结果输出到原文件中,用-o |
-n | 使用-n选项,来告诉sort,“要以数值来排序” 避免出现 10 在 2的前面这种情况 |
-t | 指定了间隔符 |
-k | 指定了间隔符之后,就可以用-k来指定列数了。 |
显示前N行
head -n N
补充tr与sed之间的关系
通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。
去除空行
|
|