列表:
Linux笔记——命令:Sort,uniq,join,cut,paste,split
Linux笔记——shell基础:变量&本地变量&位置变量&特定变量参数
鉴于博客,表格&排版&颜色标记等等无法显示,大家可以下载这个笔记的资源
12个文档,不需要积分,以目录+表格+颜色标记形式
下载资源地址http://download.csdn.net/detail/wklken/3815477
The end! Thx! wklken的笔记
-----------------------------------------------
对csdn博客的表格表示——真TMD蛋疼................显示异常丑陋,大家还是复制贴到word文档吧,稍后会将整个系列的文档发到资源里免费供大家下载
命令:sort
Sort可将许多不同的域按不同的列顺序分类
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出
格式: |
sort –cmu –o out-putfile [other options] *pos1 *pos2 input-files |
选项: |
-c 测试文件是否已经分类,如果乱序,则输出第一个乱序的行的相关信息,最后返回1 -m 合并两个分类文件 -u 删除所有复制行 -o 存储sort结果的输出文件名 【sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,但是如果你想把排序结果输出到原文件中,用重定向可就不行了。-o就可以解决这个问题了】 -b 使用域进行分类是,忽略首个空格【会忽略每一行前面的所有空白部分,从第一个可见字符开始比较】 -n 指定分类是域上数字分类【默认使用字符排序的,若是要数字,使用-n】 -t 域分隔符;默认 空格,tab,可 -r 对分类次序或比较求逆【默认是升序】 +n n为域号,使用此域开始分类 n n为域号,在分类比较时忽略此域,一般与+n一起使用 post m,n 传递到m,n,m为域号,n为开始分类字符数 sort –k2 按照第二个域进行排序 【sort [-t delimiter][+filed[column]] [option]】 【常用组合 –t ‘分隔符’ -kn】 -k选项的语法格式,如下: [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ] 这个语法格式可以被其中的逗号(“,”)分为两大部分,Start部分和End部分。 先给你灌输一个思想,那就是“如果不设定End部分,那么就认为End被设定为行尾”。这个概念很重要的,但往往你不会重视它。 Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。 C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。 FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。 同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。 |
常用示例: |
1. 保存输出 $sort –o result sortfile $sort sortfile > result Sort的启动方式,sort认为一空格/多空格为分隔符,要加入其他的,必须使用-t,执行时,先查看-t,若是有,使用其进行分割,若是无,使用空格 2. 查看文件是否已排序 $sort –c sortfile 若未排序,输出信息 $?=1 若已排序,无信息输出$?=0 3. 使用其他分隔符 $sort –t : sortfile 4. 排完序后求逆 $sort –t : -r sortfile 5. 唯一分类,原文件中重复行去除 $sort –u sortfile 6. 指定分类域,1开始 $sort –t : -k 4 sortfile 【第四个域开始】 $sort –t : -k 4 –k 1 sortfile 【sort分隔符+ -k指定列 完成根据某列进行排序】 7. 指定sort序列 $sort +0 -2 +3 sortfile 8. 将两个分类文件合并 $sort –m sorted-file1 sorted_file2 【将两个已排序文件整合,类似合并排序的后半部分】 |
命令:tr
tr |
用来从标准输入中通过替换/删除进行字符转换【不接受指定的文件参数,而只是对标准输入进行翻译】 主要用于删除文件中的控制字符或进行字符转换 使用时,提供两个字符串,串1:用于查询,串2:用于处理各种转换;串1的字符被映射到串2上,然后转换开始 |
主要用途: |
1.大小写转换 2.去除控制字符 3.删除字符 |
格式: |
tr –c –d –s [“str_from”] [“str_to”] file tr –选项 源 目标 输入文件 【即读取文件,将 源->目标】 |
选项 |
-c,用字符串1中字符集的补集替换此字符集,要求字符集为ASCII -d,删除字符串中所有指定字符串 tr –d “:” < testfile -s,删除所有str_from重复出现字符序列,只保留一个,即重复字符串压缩为一个 【一个很经典的应用就是把不规律的空格缩减为一个空格】 字符范围——tr,可以指定字符串列表或范围作为形成字符串的模式,似正则,但不是正则。 [a-z] [A-Z] [0-9] /octal一个三位八进制数,对应有效ASCII字符 [s*n]字符s出现n次 |
tr 中特定字符的不同表达方式 | ||
\a | Ctrl-g铃声 | \007 |
\b | Ctrl-h退格 | \010 |
\f | Ctrl-l走纸模式 | \014 |
\n | Ctrl-J新行 | \012 |
\r | Ctrl-M回车 | \015 |
\t | Ctrl-I tab键 | \011 |
\v | Ctrl-x | \030 |
tr中表示集合的符号 | |
[:alnum:] | 所有字母字符与数字 |
[:alpha:] | 所有字母字符 |
[:blank:] | 所有水平空格 |
[:cntrl:] | 所有控制字符 |
[:digit:] | 所有数字 |
[:graph:] | 所有可打印的字符(不包含空格符) |
[:lower:] | 所有小写字母 |
[:print:] | 所有可打印的字符(包含空格符) |
[:punct:] | 所有标点字符 |
[:space:] | 所有水平与垂直空格符 |
[:upper:] | 所有大写字母 |
[:xdigit:] | 所有16 进位制的数字 |
常用示例: |
1. 去除所有重复字符【只保留一个】 $tr –s “[a-z]” < oops.txt 2. 去除空行 $tr –s “[\012]” <oops.txt $tr –s “[\n]” <oops.txt $tr –s “\n” <oops.txt 3. 小写转大写 $echo “AbcdefG” | tr “[a-z]” “[A-Z]” $echo “AbcdefG” | tr “[:lower:]” “[:upper:]” 4. 删除指定字符串 $tr –cs “[a-z][A-Z]” “[\012*]” < data.txt 将非字母字符转为新行 -s压缩重复的字符 5. 转换控制字符 $tr –s “[\136]” “[\011*]” < start.txt 6. 快速转换 $tr –s “[\r]” “[\n]” < input.txt 7. 匹配多于一个字符 $tr “[0*4]” “*”< input.txt 【需补充*和重复的部分】 Tr SET1 SET2 tr里面包含SET1和SET2,那如果出现两个集合的大小不同的情况,tr如何处理呢? 如果SET1>SET2, SET1中多出来的字符都会和SET2中最后一个字符相对应。 如果SET1<SET2,SET2中多余的部分将被抛弃 |
命令:uniq
Uniq |
从文本文件中去除或禁止重复行,一般uniq假定文件已分类排序,并且结果正确[sort –u唯一性选项去除所有的重复行] Uniq中重复行指持续不断重复出现的行 |
格式: |
uniq –udc –f input-file output-file |
选项: |
-u 只显示不重复行 unique,唯一 -d 只显示有重复的行,每种重复显示一行 -I 忽略大小写 -c打印每一重复行出现的次数【计数】 -f n为数字,前n个域被忽略 |
常用示例 |
1.只显示非重复行 $uniq –u sortfile 2.提取非重复行到某个文件 $uniq –u sortfile result 3.只显示重复行 $uniq –d sortfile 4.打印重复行及其出现的次数 $uniq –c sortfile 5.忽略比较指定列 $uniq –f2 parts.txt |
命令:join
join【这个需要找习题练下】 |
将来自两个分类文本文件的行连在一起 前提 :file1,file2已分类 每个文件都有一些元素与另一文件相关——连 有点像求并集 注:joio时文本域要少于20= |
格式: |
join [options] input-file input-file2 |
选项: |
an n为数字,用于连接时从文件n中显示不匹配行,-a1表示第一个文件的不匹配行 o n,m n为文件号,m为域号, 1,3 表示只显示文件1的第三域 j n m n为文件号,m为域 使用其他域做连接域 t 域分隔符 用来设置非空格/非tab分隔符 |
常用示例: |
1. 连接两个文件[默认连接域为域0] $Join name.txt. town.txt 2. 显示第一个文件的不匹配行 $join –a1 name.txt town.txt 3. 设置显示连接结果 $join –o 1.1,2.2 name.txt town.txt 第一个文件第一个域和第二个文件第二个域作为显示结果 4. 设置连接域 $join –j 1 3 –j 2 2 file1 file2 |
命令:cut
Cut: |
用来从标准输入或文本文件中剪切列或域【提取文本列】 可将剪切到的文本贴到另一个文件中 |
格式: |
cut [options] file1 file2 |
选项: |
b 字节 -c list 指定剪切字符数 -d 指定与空格/tab不同的分隔符 -c 指定剪切的字符范围,字符,如-c 1,5,7 第1,5,6,7字符 -c 1-50 前50个字符 -f 指定剪切的域范围 -f 1,5 剪切1,5两个域 -f 1,10-12 剪切1,10,11,12四个域 【一般组合为 –d ‘分隔符’ –f 域NO】 【另一组合-c】 |
常用示例: |
-使用域分隔符 $cut –d : -f3 data 1. 剪切指定域 $cut –d : -f1,3 data 2. 剪切字符 $who –u | cut –c 1-8 |
命令:paste
paste |
该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反,Paste将数据贴到相关文件中 存在两个不同来源 数据应先分类,确保文件行数同 功能说明:合并文件的列 补充说明:paste指令会把每个文件以列对列的方式,一列列地加以合并 |
格式: |
paste [-s][-d <间隔字符>][--help][--version][文件...] |
选项: |
-d 指定不同分隔符,默认分隔符为tab -s 将每个文件合并成行而不是按行黏贴,文件A一行,文件B一行 |
常用示例 |
File1 1 2 File2 A B 1. 合并之 【默认分隔符是tab】 $paste file1 file2 1 A 2 B 2. 指定分隔符 $paste –d: file2 file1 A:1 B:2 3. 合并两行,而非按行黏贴 $paste –s file1 file2 1 2 A B |
命令:split
split |
用来将文件切分为小文件 |
格式: |
split –output_file_size input_filename output_filename 其中out_file_size为被分割行数,默认1000 |