shell 基础 第二部分 ( cut ,sort, wc,uniq,tee ,tr)

来源:互联网 发布:淘宝代发怎么发货 编辑:程序博客网 时间:2024/06/02 22:00


第二部分:

1.cut   剪切 
cut -d   指定分割符
#cut  -d  ':'   -f   1  /etc/passwd
以:分割符
-f  1 打印第一段
[root@niejicai-linux ~]# cut -d ':' -f 1 /etc/passwd
root
bin
daemon
adm
lp
.................
也可以指定多段,要用,号。
[root@niejicai-linux ~]# cut -d ':' -f 1,3 /etc/passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
.........................
user4:509
user0:5563
[root@niejicai-linux ~]#

cut -c 指定分割符
#cut -c  2-5 /etc/passwd  (第二个字符,到第5个字符),
也是第几列的意思。
[root@niejicai-linux ~]# cut -c 2-5 /etc/passwd
oot:
in:x
aemo
dm:x
[root@niejicai-linux ~]# cut -c 1,10 /etc/passwd    也可以用号来分割
r0
b:
d2
a:
............

2.sort 排序

[root@niejicai-linux ~]# sort  -t ':' -k3 /etc/passwd    (以:号为分割,
以第3段进行排序)
不是按照多少进制,也不是按照数字的大小,是按照ASII。
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
--------
[root@niejicai-linux ~]# sort -t ':' -k3 -n /etc/passwd   
 (按照数字大小排序要加参数 -n)
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
------
[root@niejicai-linux ~]# sort -t ':' -k3 -n /etc/passwd | cut -d ':' -f 3
0                                             (指定到段,精确到段)
1
2
3
4
-----
[root@niejicai-linux ~]# cut -d ':' -f 3 /etc/passwd | sort -n    (用了比较多,-n是按照数据的大小)
0
1
2
3
------
[root@niejicai-linux ~]# cut -d ':' -f 3 /etc/passwd | sort -nr       (-r表示反向)
5563
5562
5561
5506
-------
[root@niejicai-linux ~]# cut -d ':' -f 3 1.txt | sort -nru      (-u表示唯一的,去掉重复)
5563
5562
5561
5506
5505
509
..........
2
1
0
[root@niejicai-linux ~]# cut -d ':' -f 3 1.txt | sort -nr|uniq -c    (uniq -c可以显示重复数据的时候显示的次数)
      1 5563
      1 5562
      1 5561
      1 5506
     .......
      2 1
      1 0
[root@niejicai-linux ~]#

3.wc 计数
[root@niejicai-linux ~]# wc 1.txt
  44   59 2056 1.txt
[root@niejicai-linux ~]#

[root@niejicai-linux ~]# wc 3.txt
 6 10 58 3.txt
行数,单词,字符,文件名
[root@niejicai-linux ~]# cat 3.txt
jiljdlaihdqlih
dadjo  eoejh ]d
 jjdj]
eid
ej ed
ei kweo
[root@niejicai-linux ~]#
[root@niejicai-linux ~]# vim 9.txt
[root@niejicai-linux ~]# wc 9.txt
2 2 4 9.txt
[root@niejicai-linux ~]# cat -A 9.txt
1$
2$
[root@niejicai-linux ~]#
回车也是算是字符。

实验题:
 要你判断9.txt是否超过三行,如果没有超过,就输出一个NO

[root@niejicai-linux ~]# line=`wc -l 9.txt | cut -d ' ' -f2`; echo $line
9.txt
[root@niejicai-linux ~]# line=`wc -l 9.txt | cut -d ' ' -f1`; echo $line  2

[root@niejicai-linux ~]# if [ $line -lt "3" ]; then echo "no"; fi
no
[root@niejicai-linux ~]#


4.uniq  -c              重复的行显示出来。
uniq 去重复,最常用就一个 -c 用来统计重复的行数,
去重前要先排序sort 1.txt | uniq -c  


5.tee
后跟文件名,类似于>,比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上

[root@niejicai-linux ~]# cat 9.txt | tee 1.log
1
2
[root@niejicai-linux ~]# cat 1.log
1
2
类似于
[root@niejicai-linux ~]# cat 9.txt > 1.log
[root@niejicai-linux ~]# cat 1.
1.log  1.txt
[root@niejicai-linux ~]# cat 1.log
1
2

6.tr

用来替换字符 
最常用的就是大小写转换: head -n2 /etc/passwd |tr '[a-z]' '[A-Z]' 
tr 替换一个字符也是可以的 grep 'root' /etc/passwd |tr 'r' 'R' 
[root@niejicai-linux ~]# ls | tr 'a-z' 'A-Z'
10.TXT
12
1.LOG
1.TXT
234
.............

ROOT
[root@niejicai-linux ~]# ls | tr  'A-Z' 'a-z'
10.txt
12
1.log
1.txt
234
..............
jicai
niejicailinux.txt
root
[root@niejicai-linux ~]#

7.split 切割大文件用的

测试:
[root@niejicai-linux ~]# for   i in `seq 1 10000` ;do cat /etc/                                        passwd >> 1.txt  ; done
[root@niejicai-linux ~]# du -sh /etc/passwd
4.0K    /etc/passwd
[root@niejicai-linux ~]# du -sb /etc/passwd
1943    /etc/passwd
[root@niejicai-linux ~]# du -sh 1.txt
19M     1.txt
[root@niejicai-linux ~]# wc -l 1.txt
410044 1.txt
[root@niejicai-linux ~]#
[root@niejicai-linux ~]# mkdir  nie
[root@niejicai-linux ~]# mv 1.txt nie
[root@niejicai-linux ~]# cd nie
[root@niejicai-linux nie]# ls
1.txt
[root@niejicai-linux nie]# split -l 10000 1.txt
[root@niejicai-linux nie]# ls
1.txt  xad  xah  xal  xap  xat  xax  xbb  xbf  xbj  xbn
xaa    xae  xai  xam  xaq  xau  xay  xbc  xbg  xbk  xbo
xab    xaf  xaj  xan  xar  xav  xaz  xbd  xbh  xbl  xbp
xac    xag  xak  xao  xas  xaw  xba  xbe  xbi  xbm
[root@niejicai-linux nie]# wc -l *
  410044 1.txt
   10000 xaa
   10000 xab
   10000 xac
   ..................
   10000 xbm
   10000 xbn
   10000 xbo
      44 xbp
  820088 total
[root@niejicai-linux nie]#
还可以换一个名字,如下
[root@niejicai-linux nie]# rm -f x[ab]*
[root@niejicai-linux nie]# ls
1.txt
[root@niejicai-linux nie]# split  -l 10000 1.txt  a
[root@niejicai-linux nie]# ls
1.txt  aad  aah  aal  aap  aat  aax  abb  abf  abj  abn
aaa    aae  aai  aam  aaq  aau  aay  abc  abg  abk  abo
aab    aaf  aaj  aan  aar  aav  aaz  abd  abh  abl
aac    aag  aak  aao  aas  aaw  aba  abe  abi  abm
[root@niejicai-linux nie]#

[root@niejicai-linux nie]# rm -f a*
[root@niejicai-linux nie]# split -l 10000 1.txt niejicai
[root@niejicai-linux nie]# ls
1.txt       niejicaiai  niejicaiar  niejicaiba  niejicaibj
niejicaiaa  niejicaiaj  niejicaias  niejicaibb  niejicaibk
niejicaiab  niejicaiak  niejicaiat  niejicaibc  niejicaibl
......................
[root@niejicai-linux nie]# split -b 2M 1.txt
[root@niejicai-linux nie]# ls
1.txt       niejicaiak  niejicaiav  niejicaibg  xac
niejicaiaa  niejicaial  niejicaiaw  niejicaibh  xad
niejicaiab  niejicaiam  niejicaiax  niejicaibi  xae
niejicaiac  niejicaian  niejicaiay  niejicaibj  xaf
..............
[root@niejicai-linux nie]# du -sh *
19M     1.txt
...............
2.0M    xaf
2.0M    xag
2.0M    xah
2.0M    xai
544K    xaj
[root@niejicai-linux nie]#

8.&& 和 ||
command1 ; command2  前面命令是否执行完成都会执行后面命令
command1 && command2 只有前面命令执行成功才会执行后面命令
command1 || command2  只有前面命令不成功再去执行后面命令



第二部分:

1.cut   剪切 
cut -d   指定分割符
#cut  -d  ':'   -f   1  /etc/passwd
以:分割符
-f  1 打印第一段
[root@niejicai-linux ~]# cut -d ':' -f 1 /etc/passwd
root
bin
daemon
adm
lp
.................
也可以指定多段,要用,号。
[root@niejicai-linux ~]# cut -d ':' -f 1,3 /etc/passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
.........................
user4:509
user0:5563
[root@niejicai-linux ~]#

cut -c 指定分割符
#cut -c  2-5 /etc/passwd  (第二个字符,到第5个字符),
也是第几列的意思。
[root@niejicai-linux ~]# cut -c 2-5 /etc/passwd
oot:
in:x
aemo
dm:x
[root@niejicai-linux ~]# cut -c 1,10 /etc/passwd    也可以用号来分割
r0
b:
d2
a:
............

2.sort 排序

[root@niejicai-linux ~]# sort  -t ':' -k3 /etc/passwd    (以:号为分割,
以第3段进行排序)
不是按照多少进制,也不是按照数字的大小,是按照ASII。
root:x:0:0:root:/root:/bin/bash
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
--------
[root@niejicai-linux ~]# sort -t ':' -k3 -n /etc/passwd   
 (按照数字大小排序要加参数 -n)
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
------
[root@niejicai-linux ~]# sort -t ':' -k3 -n /etc/passwd | cut -d ':' -f 3
0                                             (指定到段,精确到段)
1
2
3
4
-----
[root@niejicai-linux ~]# cut -d ':' -f 3 /etc/passwd | sort -n    (用了比较多,-n是按照数据的大小)
0
1
2
3
------
[root@niejicai-linux ~]# cut -d ':' -f 3 /etc/passwd | sort -nr       (-r表示反向)
5563
5562
5561
5506
-------
[root@niejicai-linux ~]# cut -d ':' -f 3 1.txt | sort -nru      (-u表示唯一的,去掉重复)
5563
5562
5561
5506
5505
509
..........
2
1
0
[root@niejicai-linux ~]# cut -d ':' -f 3 1.txt | sort -nr|uniq -c    (uniq -c可以显示重复数据的时候显示的次数)
      1 5563
      1 5562
      1 5561
      1 5506
     .......
      2 1
      1 0
[root@niejicai-linux ~]#

3.wc 计数
[root@niejicai-linux ~]# wc 1.txt
  44   59 2056 1.txt
[root@niejicai-linux ~]#

[root@niejicai-linux ~]# wc 3.txt
 6 10 58 3.txt
行数,单词,字符,文件名
[root@niejicai-linux ~]# cat 3.txt
jiljdlaihdqlih
dadjo  eoejh ]d
 jjdj]
eid
ej ed
ei kweo
[root@niejicai-linux ~]#
[root@niejicai-linux ~]# vim 9.txt
[root@niejicai-linux ~]# wc 9.txt
2 2 4 9.txt
[root@niejicai-linux ~]# cat -A 9.txt
1$
2$
[root@niejicai-linux ~]#
回车也是算是字符。

实验题:
 要你判断9.txt是否超过三行,如果没有超过,就输出一个NO

[root@niejicai-linux ~]# line=`wc -l 9.txt | cut -d ' ' -f2`; echo $line
9.txt
[root@niejicai-linux ~]# line=`wc -l 9.txt | cut -d ' ' -f1`; echo $line  2

[root@niejicai-linux ~]# if [ $line -lt "3" ]; then echo "no"; fi
no
[root@niejicai-linux ~]#


4.uniq  -c              重复的行显示出来。
uniq 去重复,最常用就一个 -c 用来统计重复的行数,
去重前要先排序sort 1.txt | uniq -c  


5.tee
后跟文件名,类似于>,比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上

[root@niejicai-linux ~]# cat 9.txt | tee 1.log
1
2
[root@niejicai-linux ~]# cat 1.log
1
2
类似于
[root@niejicai-linux ~]# cat 9.txt > 1.log
[root@niejicai-linux ~]# cat 1.
1.log  1.txt
[root@niejicai-linux ~]# cat 1.log
1
2

6.tr

用来替换字符 
最常用的就是大小写转换: head -n2 /etc/passwd |tr '[a-z]' '[A-Z]' 
tr 替换一个字符也是可以的 grep 'root' /etc/passwd |tr 'r' 'R' 
[root@niejicai-linux ~]# ls | tr 'a-z' 'A-Z'
10.TXT
12
1.LOG
1.TXT
234
.............

ROOT
[root@niejicai-linux ~]# ls | tr  'A-Z' 'a-z'
10.txt
12
1.log
1.txt
234
..............
jicai
niejicailinux.txt
root
[root@niejicai-linux ~]#

7.split 切割大文件用的

测试:
[root@niejicai-linux ~]# for   i in `seq 1 10000` ;do cat /etc/                                        passwd >> 1.txt  ; done
[root@niejicai-linux ~]# du -sh /etc/passwd
4.0K    /etc/passwd
[root@niejicai-linux ~]# du -sb /etc/passwd
1943    /etc/passwd
[root@niejicai-linux ~]# du -sh 1.txt
19M     1.txt
[root@niejicai-linux ~]# wc -l 1.txt
410044 1.txt
[root@niejicai-linux ~]#
[root@niejicai-linux ~]# mkdir  nie
[root@niejicai-linux ~]# mv 1.txt nie
[root@niejicai-linux ~]# cd nie
[root@niejicai-linux nie]# ls
1.txt
[root@niejicai-linux nie]# split -l 10000 1.txt
[root@niejicai-linux nie]# ls
1.txt  xad  xah  xal  xap  xat  xax  xbb  xbf  xbj  xbn
xaa    xae  xai  xam  xaq  xau  xay  xbc  xbg  xbk  xbo
xab    xaf  xaj  xan  xar  xav  xaz  xbd  xbh  xbl  xbp
xac    xag  xak  xao  xas  xaw  xba  xbe  xbi  xbm
[root@niejicai-linux nie]# wc -l *
  410044 1.txt
   10000 xaa
   10000 xab
   10000 xac
   ..................
   10000 xbm
   10000 xbn
   10000 xbo
      44 xbp
  820088 total
[root@niejicai-linux nie]#
还可以换一个名字,如下
[root@niejicai-linux nie]# rm -f x[ab]*
[root@niejicai-linux nie]# ls
1.txt
[root@niejicai-linux nie]# split  -l 10000 1.txt  a
[root@niejicai-linux nie]# ls
1.txt  aad  aah  aal  aap  aat  aax  abb  abf  abj  abn
aaa    aae  aai  aam  aaq  aau  aay  abc  abg  abk  abo
aab    aaf  aaj  aan  aar  aav  aaz  abd  abh  abl
aac    aag  aak  aao  aas  aaw  aba  abe  abi  abm
[root@niejicai-linux nie]#

[root@niejicai-linux nie]# rm -f a*
[root@niejicai-linux nie]# split -l 10000 1.txt niejicai
[root@niejicai-linux nie]# ls
1.txt       niejicaiai  niejicaiar  niejicaiba  niejicaibj
niejicaiaa  niejicaiaj  niejicaias  niejicaibb  niejicaibk
niejicaiab  niejicaiak  niejicaiat  niejicaibc  niejicaibl
......................
[root@niejicai-linux nie]# split -b 2M 1.txt
[root@niejicai-linux nie]# ls
1.txt       niejicaiak  niejicaiav  niejicaibg  xac
niejicaiaa  niejicaial  niejicaiaw  niejicaibh  xad
niejicaiab  niejicaiam  niejicaiax  niejicaibi  xae
niejicaiac  niejicaian  niejicaiay  niejicaibj  xaf
..............
[root@niejicai-linux nie]# du -sh *
19M     1.txt
...............
2.0M    xaf
2.0M    xag
2.0M    xah
2.0M    xai
544K    xaj
[root@niejicai-linux nie]#

8.&& 和 ||
command1 ; command2  前面命令是否执行完成都会执行后面命令
command1 && command2 只有前面命令执行成功才会执行后面命令
command1 || command2  只有前面命令不成功再去执行后面命令



0 0
原创粉丝点击