Linux学习-过滤器-1-比较,抽取,统计,格式化

正在学习Linux,记录一下学习历程。参考《Unix&Linux大学教程》(幽默感+事无巨细),进行了精简摘要和总结。奋斗

组合文件:cat

将数据未加改变地复制到标准输出,数据可以来源于标准输入或文件(一个或多个)。

选项:

-n  在每行前面加一个行号

-b  和-n一起使用,不对空白行编号

-s  将多个连续空白行替换为一个空白行

如:cat -nbs name address phone


划分文件:split

将一个大文件划分为几个较小的新文件

选项:

-l  指定新文件的最大大小

-d  新文件名使用数字后缀(默认后缀为字母后缀)

-a  指定后缀中使用的数字或字母个数(默认为2位,即数字后缀为00~99,字母后缀为aa~zz)

待分割文件名后可跟指定新文件名(默认为x)

如:split -d -a 3 -l 50 file splitfile


反转文本行的顺序:tac

将文本写入标准输出之前将文本各行的顺序反转

在整个文本中以行为单位进行操作

与cat使用相似(tac是cat的反向拼写)


反转字符的顺序:rev

将各行中字符的顺序反转

在每行中以字符为单位进行操作


从数据开头选择数据行:head

选项:

-n  希望选取的数据行数量(也可直接在-后加行数)


从数据末尾选择数据行:tail

选项:

-n  希望选取的数据行数量(也可直接在-后加行数)


删除数据列:colrm

从标准输入读取数据,删除指定的数据列,然后将剩余数据写入标准输出

colrm startcol endcol (列的编号从1开始)

如:colrm 3 5

删除第3~5列

若只有一个列编号,则从此列到末尾。


比较任意两个文件:cmp

查看两个文件是否相同(对应字节完全相同),每次一个字节地比较文件。

cmp file1 file2

若相同,则不做任何处理(没有消息,就是好消息)

若不相同,显示出不匹配消息


比较有序文本文件:comm

一行一行地比较两个有序的文本文件

允许查看两个文件之间的相同和不同之处

comm  file1 file2

以三列显示输出:

第一列,file1中独有的行

第二列,file2中独有的行

第三列,file1和file2中都有的行

经常用于比较一个有序文件的两个有细小区别的版本

选项:

-1  不显示第一列输出(file1中独有的行)

-2  不显示第二列输出(file2中独有的行)

-3  不显示第三列输出(共有的行)

ps:comm应用于排序文本文件(如学生名单,经过排序,且上下行之间没有什么联系),若需要比较两个不希望排序的文件(如不希望将数据搞乱),则要用diff。


比较无序文本文件:diff

可用于跟踪程序各版本之间的变化

diff file1 file2

当比较的两个文件相同时,不显示任何输出。

当不同时,输出可以把file1改为file2的提示:

使用3个不同的单字符提示,c(change),d(delete),a(append)

每个字符左边和右边都有一串行号,左边指向file1中的行,右边指向file2中的行。

file1中的行由一个<字符标记,file2中的行由一个>字符标记,两个文件之间的行由---分隔开。

如:

file1内容:

aaa

bbb

ccc

ddd

file2内容:

cccccc

ddd

eee

输出情况为:

1,2d0

<aaa

<bbb

3c1

<ccc

---

>cccccc

4a3

>eee

若要更改file1为file2则需:

删除file1的第1,2行

将file1的第3行改为file2的第1行

在file1的第4行后追加file的第3行

选项:

-i  不区分大小写

-w  忽略所有的空白符

-b  忽略空白符数量上的区别

-B 忽略所有的空白行

-q  当两个文件不同时,省略所有细节(相当于cmp)

-s  当两个文件相同时,显示提示信息

-c  不再显示指示和行号,而显示存在不同的实际行,同时还显示不同行的上下各两行的内容(行前的+代表a,-代表d,!代表c)

-u  类似于-c,但是没有重复行

-y  对应行并排显示

ps:将一个文件转换成另一个文件的一串指令称为一个差分(diff),当发布差分以更新程序时,差分称为补丁(patch)。


抽取数据列或字段:cut

从一个数据中抽取指定列或字段并将其他内容抛弃

选项:

-c 指定列范围(可以是一个或多个列,列号之间用,隔开,也可以是像3-9这样的范围,还可以混合使用)

-f  指定字段范围

-d  指定分界符(如‘ ’,‘:’)

-s  抛弃不包含任何分界符的行


组合数据列:paste

水平组合分离的文件数据,可以将几个文件(每个文件都包含一列数据)组合成一个大表

选项:

-d  指定分界符(若指定多个字符,则轮流重复使用)


创建行号:nl

在文本中插入行号

选项:

-v  指定起始编号

-i  指定增量

-b a  强制对所有行编号(默认是不对空白行编号)


统计行,单词和字符数量:wc

输出:

行数 单词数 字符数 文件名

选项:

-l  只统计行

-w  只统计单词

-c  只统计字符

-L  显示最长行的长度


将制表符转换为空格:expand

将所有的制表符都改为空格,并且同时维持与原始文本相同的对齐方式

选项:

-t  设置制表符大小

-i  只转换行开头的指标符


将空格转换为制表符:unexpand

相当于expand的逆过程

默认情况下,只替换行开头的空格。因为,大多数情况下,只使用unexpand进行缩进。

选项:

-t  指定制表符大小

-a  替换所有空格


格式化行:fold

将长行分隔成短行,在合适的位置插入回车符

选项:

-w  指定新行的最大宽度(默认为80)

-s  不分隔单词


格式化段落:fmt

将段落中的各行连接在一起,从而使段落尽可能短小和紧凑,而且不改变内容和空白符

假定段落由空行分隔,一个段落就是一个或者多个连续的文本。

格式化规则:

行宽:每行尽可能长,但是不能超过指定长度

句子:尽可能在句子末尾分隔行。避免在句子的第一个单词之后或者最后一个单词之前分隔行

空白符:保持单词以及空行之间的所有缩进,空格

制表符:读取文件时所有的制表符转换为空格,并在最后的输出中的合适位置上插入新的制表符

选项:

-w  指定行的最大宽度(默认为75)

-u  统一间距,从而使单词之间最多只有一个空格,句子末尾最多只有两个空格

-s  仅拆分长行,不连接短行


格式化页或列:pr

格式化页:

默认情况:在顶端插入一个标题,左边插入一个边缘,底部插入一个页尾。标题和页尾各占用5行。左边缘和页尾只用于间距,为空白。标题在其中间行上包含信息(文件上一次修改的日期和时间,文件名称,页号)

选项:

+beg:end  beg是需要格式化的起始页号,end是最后页号

-h  指定标题中间的文本(默认为文件名)

-l  指定每页行数

-o  指定左边缘大小

-W  指定输出宽度

-d  使用双倍行间距文本

-t  页之间没有分隔,即把标题移除

格式化列:

选项:

-  指定输出列的数量

-l  指定每页的行数

-W  指定输出宽度

-m  将多个文件分别格式化成单独的列

-t  移除标题


ps:原始文件并没有发生改变,改变的是标准输出的数据


猜你喜欢

转载自blog.csdn.net/qq_31730735/article/details/80461725