shell学习之合并与分割
时间:2008-04-28 来源:piaoyizu
先加两条自己用的命令.
cat 1.txt | grep "inet addr" | awk 'FS="inet addr:" {print substr($2, 6, 20)}'
cat 1.txt | grep "inet addr" | cut -d ':' -f2 | cut -d ' ' -f1
cat 1.txt | grep "inet addr" | cut -c 21-35
现在开始引用转载的东东!
1,sort用法
sort 在执行时先查看是否为域分隔设置了-t选项,如果设置了,则使用它来将记录分成域0、域1等等。如果没有设置,用空格代替。缺省时sort将整个行排序,指定域的情况例外。例如:
注意:域是从0开始的
field0 field1 field2
abs 23 tt
cov 89 sdf
gg 98 dsf
1),基本格式
sort [-m][-o output][-bdfinru][-t char][-k keydef]... [file...]
sort -c [-bdfinru][-t char][-k keydef][file]
选项说明:
-c 检测文件是否已经被分类
-m 合并已经分类的文件
-o 指定输出文件
-u 删除所有复制行
---------------
-t char 使用非空格或TAB做分隔域
-kn 让域的计数从域1开始,并从第n域排序
-r 对分类次序或比较求逆
+n n 这里的第一个n是域号,表示对n域的数值进行分类
+n 按第一个字母对第n域进行分类,注意和前一种的区别
2)输出的保存
i)使用重定向: sort filename > result.out
ii)使用-o选项: sort filename -o result.out
3)文件是否已经分类的检查
i)sort -c filename #检测文件是否已经分类
ii)sort -t : -c filename #检测文件是否按照:域进行分类
4)-r 分类求反
i)按0域逆向排序:sort -t: -r /etc/passwd
5)+n 按指定域分类
i)按第3域(数字)分类:
sort -t: +2 /etc/passwd #注意这里是按第n域的第一个字母分类,而不是整个数值
6)+n n 数值域分类
sort -t: +2n /etc/passwd #第2域,实际上是第三栏,也就是用户的ID
7)u 唯一性分类(必须是完全相同的行)
i)sort -u filename
ii)sort -u +2n #按第2域数值域,分类,同时除去相同的数值
8)指定分类序列
sort +0 -2 +3 #开始以0域分类忽略2域然后再以3域分类
2,cut的用法
cut用来对输入或文本的列和域进行剪切。剪切的内容可以粘贴到另外的文本。默认是以空格或tab做为域分隔符.
基本用法:
cut [options] file1 file2
具体的详细用法,参考: man cut.
选项:
-c list 指定剪切的字符数
-f field 指定剪切域数
-d char 指定不同的域分隔符
-c1 5,7 剪切第1然后是第5到7个字符
-f 1,5 剪切第1和第5域
-f 11-15 剪切第11到15域
-f 1- 剪切第1到最后域
例子:
1)cut -d: -f1,6 /etc/passwd #使用:最为分隔符,然后取第1和第6域
2)cut -d: -f6- /etc/passwd #使用:做分隔符,并取第6域到最后一域
3)cut -c1-2 /etc/passwd #取第1字符到2字符
4)cut -c2,3,6 /etc/passwd #取第2,第3和第6字符
3,paste的用法
paste按行将不同的信息行放在一起。
基本格式:
paste -d -s file ...
-d 指定不同于空格或TAB键的域分隔符
-s 将每个文件合并成行而不是按行粘贴
- 使用标准输入: ls -l | paste
例子:进行域的合并操作
cat file1
name score
name1 77
name2 99
cat file2
old school
12 swust
23 sj
-----------------
paste file1 file2
输出:
name score old sch
name1 77 12 swu
name2 99 23 sj
4,split的用法
基本格式:
split [options] input-file [输出文件前缀名]
[options]:
-l number 指定每个分解文件的行数
-b n 指定每个文件的大小n*8
-b nk n*1024
-b nm n*1024*1024
-a n 指定后缀的长度
split把输入文件分解成小文件。因为有时侯文件太大,在使用VI等工具时可能出现问题,我们没有选择的余地。分解后的几个文件的默认名是:x[aa]到x[zz]。out-put-file-size选项用来指定每个文件的行数
1)split -l 10 -a 3 file1
分割文件file1每个小文件十行,分解成的文件的后缀为3个字符:x[aaa]到x[zzz]
2)split -b 1k -a 3 file1
分割文件file1每个小文件1k,分解成的文件的后缀为3个字符:x[aaa]到x[zzz]
3)split -b 1k -a 3 file1 hover_
分割文件file1每个小文件1k,分解成的文件的后缀为3个字符:x[aaa]到x[zzz],前缀以hover_开启