Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61218
  • 博文数量: 26
  • 博客积分: 315
  • 博客等级: 二等列兵
  • 技术积分: 299
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-05 17:32
文章分类
文章存档

2014年(13)

2013年(3)

2012年(10)

我的朋友

分类: LINUX

2014-02-04 21:42:43

摘自:[]Harley HahnUnix & Linux大学教程

 

十三、过滤器:统计和格式化


 

1)创建行号:nl

nl在文本中插入行号,行号总是临时的,除非保存。命令语法为

nl [-v start] [-i increment] [-b a] [-n ln|rn|rz] [file…]

其中start是起始号,increment是增量,file是文件名

-v选项改变起始编号,-i选项改变增量

默认情况下,nl不对空行编号。为了强制编号,使用-b(body number,正文编号)选项,后面跟字母a(all,所有行)

nl -b a file

-n(number format)选项,后面跟一个代码控制数字格式:

ln=左对齐,没有前导0

rn=右对齐,没有前导0

rz=右对齐,有前导0

 

2)统计行、单词和字符数量:wc

wc [-clLw] [file…]

默认情况下,wc的输出包含3个数字:数据中的行数、单词数和字符数。行(Line)、单词(Word)和字符(Charater),LWC, “Look at woman carefully”.

其中,“字符”就是字母、数字、标点符号、空格、制表符或新行字符;“单词”就是一串连续的字符,用空格、制表符或新行字符分隔;“行”就是以新行字符结尾的一串字符。

-l(统计行)   –c(统计字符)      -w(统计单词)

对于Linux来说,还有另一个选项-L,显示输入中最长行的长度。

 

3)可视化制表符和空格

Vi编辑器   :set list ()  :set nolist ()

Nanopico     P (/)。 使用之前,必须在nano/pico初始文件中添加下述行,nanp/pico的初始文件分别为.nanorc.picorc

set whitespace “xy”

其中x是希望表示一个制表符的字符,而y是显示一个空格的字符。

 

4)将制表符转换为空格:expand

命令语法为 expand [-i] [-t size|-t list] [file...]

其中size是固定宽度制表符的大小,list是制表位列表,而file是文件名。

expand使用Unix的默认设置,假定制表符之间有8个位置。使用-t(-tab stop,制表位)选项可以改变该设置。-t选项有两种使用方式,第一种,如果所有的制表位都是相同间距,则可以在-t后加一个数字。

-t选项还有一种使用方式。如果希望制表位位于特定的位置上,则可以指定一串用逗号分开的多个数字。在该列表中,编号从0开始。

当希望转换制表符时,还有一种选项可使用,只能在行的开头使用。在这种情况下,使用的就是-i(initial,初始)选项,例如:

expand -i -t 4 data > data-new

 

5)将空格转换为制表符:unexpand

语法为 unexpand [-a] [-t size|-t list] [file...]

默认只替换行首的空格,使用-a(all,全部)替换全部。

 

6)格式化行:fold

fold程序处理行,fmt程序处理段落,而pr程序处理页面和列。

fold程序可根据指示瞬间分隔行,语法为:

fold [-s] [-w width] [file...]       (width是新行最大宽度)

默认情况下,fold程序在位置80处分隔行。因为在20世纪70年代,当开发Unix时,人们认为80是关于文本行的约整数。为了改变这个宽度,可使用-w(width,宽度)选项,后接希望的最大行长度。

-s选项告诉fold不分隔单词。

 

7)格式化段落:fmt

fmt的目标是将段落中的各行连接在一起,从而使段落尽可能短小和紧凑,而且不改变内容和空白符。语法为:

fmt [-su] [-w width] [file...]

其中width是行的最大宽度,file是文件名称。

fmt读取文本时,它假定段落由空行分隔。因此,一个“段落”就是一个或多个连续的文本行,不含空行。fmt按以下规则读取并格式化段落。

行宽:使每行尽可能长,但不超过指定长度。默认为75,可用-w选项

句子:尽可能在句末分隔行

空白符:保留单词以及空行之间的所有缩进、空格。使用-u选项修改

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

-u(uniform spacing,统一间距)选项告诉fmt减少空格,从而使单词间最多有一个空格,句末最多有两个空格,这一样式为“法式间距”。

-s(split only,仅拆分)选项告诉fmt拆分升迁,但不连接短行。

 

8pr

pr的主要功能是按页格式化文本,以使其适合于打印。语法为:

pr [-dt] [+ begin[:end]] [-h text] [-l n] [-o margin] [-W width] [file...]

其中begin是需要格式化的第一页,end是需要格式化的最后一面,text是标题中间的文本,n是每页的行数,margin是左边缘的大小,width是输出的宽度,file是文件。

通常pr作为管道线的一部分,以使在将文本发送给打印机前对文本进行格式化。例:

cat data1 data2 data3 | pr | lpr

此命令将3个文件组合后输出发送给pr格式化,再发送给lpr进行打印(Unix中文件打印的两个基本程序是lplpr)。

默认情况下,pr通过在顶端插入一个标题,左边插入一个边缘,底部插入一个页尾来格式化页面。标题和页尾各占5行。左边缘和页尾只用于间距,所以它们是空白的。但是标题在其中间行包含信息:文件上一次修改日期和时间、文件的名称以及页号。

pr程序假定一页只有66行,因为老式打印机使用11英寸的纸,每英寸打印6行。标题和页尾各占5行,则每页剩下56行用于单倍选中的文本。

几乎所有暑假,当使用pr格式化页并进行打印时,默认设置已能满足需求。但是如果有需要,也可以使用几个选项修改设置。最常用的选项是-d,该选项告诉pr使用双倍行距文本。

如果希望控制格式化哪些页,可使用 pr +begin[:end],例:

fmt essay | pr -d +3:6 | lpr

如果希望指定标题中间的文本,可使用-h选项,例:

fmt essay | pr -h “My Essay By Harley” | lpr

为了改变每页的总行数,可以使用-l,后面加一个数字。

为了消除标题,可使用-t选项。

默认情况下,pr不插入左边缘,因为极为可能打印机被设置成自动创建边缘。但是,如果希望自己添加一个额外的边缘,则可以使用-o(offset,偏移)选项,后面跟额外边缘的空格数量。另外,还可以使用-W选项,改变输出的宽度(默认为72字符)。当使用-W选项时,太长的行会被截断。因此一定要小心不要丢失文本。

将文本文件发送pr之前使用fold或者fmt对文本进行预处理时,最好明确指定希望的准确行宽,因为这3个程序使用不同的默认值:fmt-80字符/行,fmt-75字符/行,pr-72字符/

pr还可以按列格式化文本,输入数据来源于单个或多个文件。语法为:

pr [-mt] [-columns] [-l lines] [-W width] [file...]

其中column是输出列的数量,lines是每页的行数,width是输出的宽度,file是文件名。例:

fmt -w 35 article | pr -z -l 48 > article-columns

默认情况下,pr使用制表符对齐各列

pr还可以将多个文件分别格式化为单独的列。使用-m (merge,合并)选项,pr将在单独的列中输出各个文件。

通过这种方式合并多个文件时,通常使用-t选项移除标题。

pr –mt f1 f2 f3 > formatted-articles

 

 


阅读(632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~