文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Shell基础学习笔记(7)

Shell基础学习笔记(7)

时间:2005-07-27  来源:biary

 

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

sort -cmu -o output_file [other options] +pos1 +pos2 input_files

-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名

-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始

s o r t还有另外一些方法指定分类键。可以指定k选项,第1域(分类键)以1开始。不要与前面相混淆。其他选项也可以使用k,主要用于指定分类域开始的字符数目。

可以用下面这些选项来进一步修改排序算法:
-d(只将字母、数字和空白用作排序键)、
-f(关闭大小写区分,认为小写和大写字符是一样的)、
-i(忽略非打印的 ASCII 字符)、
-M(使用三个字母的月份名称缩写:JAN、FEB、MAR … 来对行进行排序)和
-n(只用数字、- 和逗号或另外一个千位分隔符对行进行排序)。
这些选项以及 -b 和 -r 选项可以用作键编号的一部分,
在这种情况下,它们只适用于该键而非全局,其作用就跟在键定义外使用它时一样。
定sort序列
可以指定分类键顺序,也可以使用- n选项(n为域号)指定不使用哪个分类键进行查询。

nl -ba file | sort -nr | cut -f 2 > new.file

sort +field_number.characters_in            意即从f i e l d _ n u m b e r开始分类,但是要在此域的第c h a r a c t e r s _ i n个字符开始。

最后一组选项处理输入、输出和临时文件。例如,-c 选项,当它用于 sort -c < file 中时,它检查输入文件是否已进行了排序(您也可以使用其它选项),如果已进行了排序,则报告一个错误。这样,在处理可能需要花很长时间进行排序的大型文件之前,可以很方便地对其进行检查。当您将 -u 选项和 -c 选项一起使用时,会被解释为一个请求:检查输入文件中不存在两个相同的行。
tsort 通常用于解决一种逻辑问题,即必须通过观察到的部分次序预测出整个次序。

当您处理大型文件时还有一个很重要的 -T 选项,它用于为临时文件(这些临时文件在 sort 完成工作之后会被除去)指定其它目录,而不是缺省的 /tmp 目录。

+pos1 -pos2 is the classical alternative to -k, with
counting from 0 instead of 1, and pos2 designating
next-after-last instead of last character of the key. A
missing character count in pos2 means 0, which in turn
excludes any -t tab character from the end of the key.
Thus +1 -1.3 is the same as -k 2,2.3 and +1r -3 is the
same as -k 2r,3.

$uniq -u d c -f input-file out-file

-u 只显示不重复行。
-d 只显示有重复数据行,每种重复行只显示其中一行
-c 打印每一重复行出现次数。
-f n为数字,前n个域被忽略。
-s chars
           Ignore the first chars characters when doing comparis-
           ons,  where  chars  is  a positive decimal integer. If
           specified in conjunction with the -f option, the first
           chars characters after the first fields fields will be
           ignored.  If  chars  specifies  more  characters  than
           remain  on  an  input line, a null string will be used
           for comparison.

join [options] input-file1 input-file2

选项:
an n 为一数字,用于连接时从文件n中显示不匹配行。例如, - a 1显示第一个文件的不匹配行,- a 2为从第二个文件中显示不匹配行。
o n.m n为文件号,m为域号。1 . 3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1 . 3,2 . 1。  e.g. join -o 1.1,2.2 names.txt town.txt
j n m n为文件号,m为域号。使用其他域做连接域。 e.g. join -j1 4 -j2 2 pers pers2 (使用文件p e r s中域4,匹配文件p e r s 2中域2)
t 域分隔符。用来设置非空格或t a b键的域分隔符。例如,指定冒号做域分隔符- t:

cut [options] file1 file2

-c list 指定剪切字符数。
-f field 指定剪切域数。
-d 指定与空格和t a b键不同的域分隔符。
- c用来指定剪切范围,如下所示:
- c 1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前5 0个字符。
-f 格式与- c相同。
-f 1,5 剪切第1域,第5域。
- f 1,10-12 剪切第1域,第1 0域到第1 2域。

paste -d -s -file1 file2

-d 指定不同于空格或t a b键的域分隔符。例如用@分隔域,使用- d @。
-s 将每个文件合并成行而不是按行粘贴。
- 使用标准输入。例如ls -l |paste ,意即只在一列上显示输出。  e.g.   ls | paste -d: - - - - -     一行显示四个文件,以冒号:分开

 split -output_file-size input-filename output-filename

tr
t r用来从标准输入中通过替换或删除操作进行字符转换。t r主要用于删除文件中控制字符或进行字符转换。使用t r时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。t r刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。

t r - c - d - s [ " s t r i n g 1 _ t o _ t r a n s l a t e _ f r o m " ] [ " s t r i n g 2 _ t o _ t r a n s l a t e _ t o " ] i n p u t _f i l e

-c 用字符串1中字符集的补集替换此字符集,要求字符集为A S C I I。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

字符范围
使用t r时,可以指定字符串列表或范围作为形成字符串的模式。这看起来很像正则表达式,但实际上不是。指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。

[a-z] a-z内的字符组成的字符串。
[A-Z] A-Z内的字符组成的字符串。
[0-9] 数字串。
/octal 一个三位的八进制数,对应有效的A S C I I字符。
[O*n] 表示字符O重复出现指定次数n。因此[ O * 2 ]匹配O O的字符串。
大部分t r变种支持字符类和速记控制字符。
字符类格式为[:c l a s s ],包含数字、希腊字母、空行、小写、大写、c n t r l键、空格、点记符、图形等等。

tr中特定控制字符的不同表达方式:  速记符含义八进制方式
a Ctrl-G 铃声 0 0 7
b Ctrl-H 退格符 0 1 0
f Ctrl-L 走行换页 0 1 4
Ctrl-J 新行 0 1 2
r Ctrl-M 回车 0 1 5
Ctrl-I tab键 0 11
v Ctrl-X 0 3 0

e.g.  去除空行:tr -s "[12]" < plane.txt   tr -s '12' <plane.txt    tr -s ['12'] < plane.txt     tr -s [" "] < plane.txt

tr -cs "[a-z][A-Z]" "[12*]" <diary.txt   将文件每行所有不包含在[ a - z ]或[ A - Z ](所有希腊字母)的字符串放在字符串1中并转换为一新行。- s选项表明压缩所有新行, - c表明保留所有字母不动。  * 的意思还没搞明白:(

大写到小写:   tr "[a-z]" "[A-Z]" < plane.txt    tr "[:lower:]" "[:upper:]" < plane.txt

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载