基础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 \n Ctrl-J 新行\ 0 1 2 \ r Ctrl-M 回车\ 0 1 5 \t Ctrl-I tab键\ 0 11 \ v Ctrl-X \ 0 3 0 e.g. 去除空行:tr -s "[2]" < plane.txt tr -s '2' <plane.txt tr -s ['2'] < plane.txt tr -s ["\n"] < plane.txt tr -cs "[a-z][A-Z]" "[2*]" <diary.txt 将文件每行所有不包含在[ a - z ]或[ A - Z ](所有希腊字母)的字符串放在字符串1中并转换为一新行。- s选项表明压缩所有新行, - c表明保留所有字母不动。 * 的意思还没搞明白:( 大写到小写: tr "[a-z]" "[A-Z]" < plane.txt tr "[:lower:]" "[:upper:]" < plane.txt |