shell脚本命令--cut(字符截取)、sort(字符排序)

一、cut

cut 命令多用与字符截取
1.语法格式

  • cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]

2.使用说明

  • cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
  • 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

3.主要参数

-b 以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志
-c 以字符为单位进行分割
-d 自定义分隔符,默认为制表符
-f 与-d一起使用,指定显示哪个区域
-n 取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除

4.指定字段的字符或者字节范围
cut命令可以将一串字符作为列来显示,字符字段的记法:

N-:从第N个字节、字符、字段到结尾;
N-M:从第N个字节、字符、字段到第M个(包括M在内)字节、字符、字段;
-M:从第1个字节、字符、字段到第M个(包括M在内)字节、字符、字段。

5.示例

  • 以/mnt/passwd文件为例截取
[root@shell mnt]# cp /etc/passwd .
  • 查看文件前五行
[root@shell mnt]# head -5 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  • 截取用户名:-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域
[root@shell mnt]# head -5 passwd | cut -d : -f 1
root
bin
daemon
adm
lp
  • 截取第1,3到6,字段
[root@shell mnt]# head -5 passwd | cut -d : -f 1,3-6
root:0:0:root:/root
bin:1:1:bin:/bin
daemon:2:2:daemon:/sbin
adm:3:4:adm:/var/adm
lp:4:7:lp:/var/spool/lpd
  • 截取1到3个字符
[root@shell mnt]# head -5 passwd | cut -c 1-3
roo
bin
dae
adm
lp:
  • 截取前2个字符
[root@shell mnt]# head -5 passwd | cut -c -2
ro
bi
da
ad
lp
  • 截取第5个字符开始到结尾
[root@shell mnt]# head -5 passwd | cut -c 5-
:x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
on:x:2:2:daemon:/sbin:/sbin/nologin
x:3:4:adm:/var/adm:/sbin/nologin
:4:7:lp:/var/spool/lpd:/sbin/nologin

文章 https://www.cnblogs.com/fulucky/p/8124858.html

二、sort

多用于字符排序

  • 参数说明
  -b   忽略每行前面开始出的空格字符。
  -c   检查文件是否已经按照顺序排序。
  -d   排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  -f   排序时,将小写字母视为大写字母。
  -i   排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  -m   将几个排序好的文件进行合并。
  -M   将前面3个字母依照月份的缩写进行排序。
  -n   依照数值的大小排序。
  -o<输出文件>   将排序后的结果存入指定的文件。
  -r   以相反的顺序来排序。
  -t<分隔字符>   指定排序时所用的栏位分隔字符。
  +<起始栏位>-<结束栏位>   以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  --help   显示帮助。
  --version   显示版本信息
  • 示例
    1、sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
[root@shell mnt]# vim sort.txt
[root@shell mnt]# cat sort.txt 
aaa
bbb
fff
kearshy
hh

[root@shell mnt]# sort sort.txt 

aaa
bbb
fff
hh
kearshy

2.sort的-u 选项它的作用很简单,就是在输出行中去除重复行。

[root@shell mnt]# vim sort.txt
[root@shell mnt]# cat sort.txt 
aaa
bbb
fff
kearshy
hh
hh
kearshy
[root@shell mnt]# sort -u sort.txt 
aaa
bbb
fff
hh
kearshy

3、 sort的-n选项(纯数字排序),因为sort排序程序将这些数字按字符进行排序,排序程序会先比较1和2,显然1小,所以就会出现10比2小的情况。这也是sort的一贯作风。

[root@shell mnt]# cat number 
81
56
45
8
7
5
4
[root@shell mnt]# sort number 
4
45
5
56
7
8
81
[root@shell mnt]# sort -n number 
4
5
7
8
45
56
81

4、sort的-o选项,想把排序结果输出到原文件中,用重定向可就不行了。

[root@shell mnt]# vim number 
[root@shell mnt]# cat number 
81
56
4
5
8
7
45
[root@shell mnt]# sort -nr number -o number
[root@shell mnt]# cat number 
81
56
45
8
7
5
4

5、sort的-t选项和-k选项

[root@shell mnt]# cat date 
1997-11-13
1998-02-18
2004-04-02
1998-04-29

这个文件有三列,列与列之间用“-”隔开了,第一列表示年,第二列表示月,第三列表示日。那么我想以月来排序,也就是以第二列来排序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。

[root@shell mnt]# sort -n -k 2 -t '-' date
1998-02-18
1998-04-29
2004-04-02
1997-11-13
[root@shell mnt]# sort -n -k 1 -t '-' date
1997-11-13
1998-02-18
1998-04-29
2004-04-02

你可能感兴趣的:(linux下shell基础)