之前已将写了5种文本处理工具,接着再写4种,有兴趣的可以先看一下之前的博客
目 录
6、paste
7、wc
8、sort
9、cut
练习
6、paste
(1)paste file1 file2 [file3] 可以合并多个文件,文件之间用空格隔开
想到把两个文件合并显示,我们可能会想到复制再追加
cat f1>>f2 f2就是将原先的f2和f1 合并
但是原本的f2就丢失了,当然我们可以先把f2备份,但是太麻烦了
paste f1 f2 可以合并多个文件显示,但原先的文件并不会合并,我们测试一下
可以是将两个文件行数一样的显示在了一行,但不会改变原文件
(2)paste -s f2 将文件内容变成一行显示
将f2 文件内容变成一行显示,用之前的tr '\n' '\t'也可以实现也可以用
至于这里为什么将是将换行符\n转换成TAB \t
是因为,paste是默认将两个文件合并在一起用TAB符间隔,我们也可以指定其他的符号
(3)paste –d:f1 f2 指定合并后的分隔符
当然还可以用% 等隔开,可以在自己的虚拟机上试试
7、wc
这里的wc可不是那个wc 而是 word count
(1)wc -m 字符数
因为每行后的换行符也占用了一个字符
那么把换行符去掉呢
echo -e "abcd\c"|wc-m
去掉换行符便是4个字符
(2)-c 字节
echo abcd|wc -c
也是5个字符,那么字节和字符有什么不同呢,我们举个汉字例子试试吧
可以看出,去除换行符的占位,一个汉字是一个字符,确是占三个字节,这里的汉字所占字节在不同编码中也不同。可以查看下面的链接
(3)wc – w 单词数
(4)wc –l 显示行数
(5)单独的wc显示以下信息
wc 行数 单词数 字节
-l -w -c
8、cut
(1)cut 剪切的意思
-d 指定分隔符 (默认TAB)
-f 选取第几列
n 第n列
n-r 第n列到第r列
n,m-r 第n列;第m列到第r列
只说概念大家也不明白,我们举例子说明
我只想取出/etc/paswd中的用户名,即文件的第一列该怎样取出呢,用到上面的两个选项。
我们可以看到各个信息之间用:隔开,我们想要的信息在第一列,你是否想到了什么
是的,cat/etc/passwd|cut -d: -f1
当然我想选前两行呢
(2)-c 按字符截取
n 第n列
n-r 第n列到第r列
n,m-r 第n列;第m列到第r列
(3)--output-delimiter 指定输出符
通过之前的截取可以看出文件中各列以什么字符隔开,就显示什么字符,而--output-delimiter 可以指定输出符
cut -d: -f1,3 --output-delimiter='|' /etc/passwd
9、sort
(1)sort 顾名思义就是整理分类的意思
(2)-r 执行反方向(由上至下)整理 ,与sort恰恰相反
(3)-n 执行按数字大小整理,从大到小排列
我们也可以组合用cat a.txt|sort -nr
(4)sort -u 选项(独特,unique)删除输出中的重复行
(5)-t c 选项使用c做为字段界定符 -t: -t%
-kX 选项按照使用c字符分隔的X列来整理
这两个选项经常一块使用
例如:将/etc/passwd 按照第3列从大到小排列
练习
结合以上所有文本处理工具做几道练习题
1.找出分区利用率最大的值
df|tr -s ‘ ‘%|cut -d% -f5|sort -t% -k1-nr|head -n 1
2.查出用户UID最大值的用户名、UID及shell类型
cat /etc/passwd|cut -d: -f1,3,7|sort -t:-k2 -nr|head -n 1