Linux(7)处理文件数据

30 篇文章 0 订阅

1 cut命令

1.1 作用

  • 显示行中的指定部分
  • 删除文件中的指定字段

1.2 语法

cut [OPTION]… [FILE]…

[root@yr d01]# cat test.txt
# 用tab分隔,制表符是字段或列默认的界定面

No      Name    Mark    Percernt
tom     69      91
jack    71      87
alex    68      98

[root@yr d01]# cat test2.txt

No;Name;Mark;Percent
tom;69;91
jack;71;87
alex;68;98
  • -f 提取指定字段和多列字段
[root@yr d01]# cut -f1 test.txt         # 提取第一列

No
tom
jack
alex

[root@yr d01]# cut -f1,3 test.txt        # 提取第一和第三列

No      Mark
tom     91
jack    87
alex    98
-n
  • –complement (补集)补足显示被选择的字节、字符或字段
[root@yr d01]# cut -f1,3 test.txt --complement

Name    Percernt
69
71
68
  • -b 按字节(一个汉字是两个字节,一个英文一个字节)选取,忽略多字节字符边界,除非也指定了-n标志
  • -n 与"-b"连用,不分割多字节字符
  • -c 仅显示行中指定范围的字符
[root@yr d01]# cut -c3 test.txt          # 只显示第三个字符


m
c
e
  • -d 指定字段的分隔符,默认的字段分隔符为"TAB"
[root@yr d01]# cut -f1 -d" " test.txt

No
tom
jack
alex
[root@yr d01]# cut -f1 -d";" test2.txt

No
tom
jack
alex
[root@yr d01]# cut -f1 -d" " test2.txt  

No;Name;Mark;Percent
tom;69;91
jack;71;87
alex;68;98
  • –help 显示指令的帮助信息
  • –version 显示指令的版本信息

将一串字符作为列来显示:

  • N- 从第N个字节、字符、字段到结尾
[root@yr d01]# cut -f2- test.txt          # 第2列到最后一列

Name    Mark    Percernt
69      91
71      87
68      98
  • N-M 第N到第M个(含M)字节、字符、字段
[root@yr d01]# cut -f1-3 test.txt          # 第1-3列

No      Name    Mark
tom     69      91
jack    71      87
alex    68      98
  • -M 第1到第M个(含M)字节、字符、字段
[root@yr d01]# cut -f-3 test2.txt          # 第1-3列

No      Name    Mark
tom     69      91
jack    71      87
alex    68      98
  • -b:字节
  • -c:字符
  • -f:字段

2 sort命令

[root@yr d01]# sort num.txt

2
23
26
4
6
64
7
9
[root@yr d01]# sort eng.txt

five
four
one
one
one
three
two
  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字⺟母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。识别月份的前三个英文字母
[root@yr d01]# sort -M month.txt
feb
mar
apr
jul
sep
  • -n 依照数值的大小排序。
[root@yr d01]# sort -n num.txt

2
4
6
7
9
23
26
64

查看/root下所有文件大小,并按文件大小排序

[root@yr ~]# du -sh * | sort -n     # 查看文件及目录大小 du -sh *
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
[root@yr d01]# sort -nr num.txt
[root@yr d01]# sort -n -r num.txt
  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • -u unic,输出行中去除重复行
  • -t<分隔字符> 指定排序时所⽤用的栏位分隔字符。
  • -k 指定了间隔符后,可以用-k来指定列数
    可以加两个-k
[root@yr d01]# sort -n -k 2 -t '-' date.txt            # 以-为分隔符将第2列以数值大小排列
[root@yr d01]# sort -n -k 3 -t '-' date.txt            # 以-为分隔符将第3列以数值大小排列
[root@yr d01]# sort -n -k 2 -k 3 -t '-' date.txt       # 以-为分隔符将第2列和第3列以数值大小排列
  • –help 显示帮助。
  • –version 显示版本信息

3 grep命令

文本搜索工具,并把配的行输出出来,查找众多数据中的一行,而数据又埋藏在文件或某一行的中间位置

找出包含root的行

[root@yr ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
  • –color=auto 输出包含bin的行,并且高亮显示
[root@yr ~]# cat /etc/passwd > /root/d01/passwd.txt

[root@yr d01]# grep --color=auto bin /root/d01/passwd.txt
  • -v 反向查找, 输出包含不匹配关键字的行
[root@yr d01]# grep --color=auto 6 num.txt -v
7
9
23
4
2
[root@yr d01]# grep --color=auto 6 num.txt
6
26
64
  • -n 显示行号
[root@yr d01]# grep --color=auto 6 num.txt -n
1:6
4:26
5:64

也可以-nv 或者-n -v

  • -c 统计匹配的行,总个数
[root@yr d01]# grep --color=auto 6 num.txt -c
3
  • -e 匹配多个关键字
[root@yr d01]# grep --color=auto -e 6 -e 2 num.txt		# 62高亮
6
26
64
23
2
  • -i 不区分大小写字符
[root@yr d01]# grep --color=auto -i "lap" t.txt		   # lap和LAP高亮
LAPTOP
laptop
laptop

单引号、双引号、没有引号都可以

否则默认的是只返回区分大小写

[root@yr d01]# grep --color=auto lap t.txt
laptop
laptop
  • -A{num} 返回能匹配的后n行,不但能匹配到指定的字符那一行。而且字符后面所指定的n行也能显示出来。
[root@yr d01]# grep --color=auto root passwd.txt -n -A2
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
12:operator:x:11:0:operator:/root:/sbin/nologin
13-games:x:12:100:games:/usr/games:/sbin/nologin
14-gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
  • -B{num} 不但能匹配到指定的字符那一行。而且字符前面所指定的n行也能显示出来。

在这里插入图片描述

  • -C | -a | -b:不但能匹配到指定的字符那一行。而且字符前后所指定的n行也能显示出来。

  • . 一个.代表任意单个字符,指的就是一个点代表1个字符,符号也行。
    在这里插入图片描述

  • *: 匹配任意长度的任意字符

在这里插入图片描述

  • [ ]:指定范围内的任意单个字符。这个括号中指定的字符都能匹配出来,匹配范围广。

在这里插入图片描述

  • [^]

  • [[:digit:]] 输出所有带数字的行
    在这里插入图片描述

  • [[:lower:]] 表示小写字母。

  • [[:upper:]] 表示大写字母。

  • [[:alpha:]] 表示全部的大写和小写字母。

  • [[:alnum:]] 表示全部的字母和数字。

  • [[:space:]] 表示空格符。

  • [[:punct:]] 表示标点符号。

设置函数
为了方便我把grep --color=auto定义一个别名,别名为cgrep。方便使用。后续直接使用cgrep 就能显示颜色了。
编辑 vi.bash_profile文件,在下面添加alias grepc=“grep --color=auto”
在这里插入图片描述

4 awk命令

awk是列处理器

[root@yr ~]# ps -ef | head -20 > ps.txt
  • print 是awk打印指定内容的主要命令
    输出所有文件内容
[root@yr ~]# awk '{print}' ps.txt
[root@yr ~]# awk '{print $0}' ps.txt
  • 输出第一列:
awk '{print $1}' ps.txt

在这里插入图片描述

  • awk ‘{print $1,$3}’ ps.txt 多列之间用空格分开输出
    输出第三列和第二列
    在这里插入图片描述
    相连输出:
    在这里插入图片描述

  • awk ‘{print $1 " – " $3}’ ps.txt 在第一列和第三列之间手动添加自定义分隔
    在这里插入图片描述
    用双引号

输出相同个数的a行,一行只有一个a字母。(文件有多少行就输出多少行)

在这里插入图片描述

  • -F 指定分隔符
    在这里插入图片描述

  • $1 指指定分隔符后,第一个字段,$3第三个字段, \t是制表符
    一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格

awk -F":" '{print $1}'  /etc/passwd

awk -F":" '{print $1 $3}'  /etc/passwd                       //$1与$3相连输出,不分隔

awk -F":" '{print $1,$3}'  /etc/passwd                       //多了一个逗号,$1与$3使用空格分隔

awk -F":" '{print $1 " " $3}'  /etc/passwd                  //$1与$3之间手动添加空格分隔

awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd       //自定义输出 

awk -F: '{print NF}' /etc/passwd                                //显示每行有多少字段

awk -F: '{print $NF}' /etc/passwd                              //将每行第NF个字段的值打印出来

 awk -F: 'NF==4 {print }' /etc/passwd                       //显示只有4个字段的行
 
awk -F: 'NF>2{print $0}' /etc/passwd                       //显示每行字段数量大于2的行

awk '{print NR,$0}' /etc/passwd                                 //输出每行的行号

awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd      //依次打印行号,字段数,最后字段值,制表符,每行内容

awk -F: 'NR==5{print}'  /etc/passwd                         //显示第5行

awk -F: 'NR==5 || NR==6{print}'  /etc/passwd       //显示第5行和第6行

route -n|awk 'NR!=1{print}'                       //不显示第一行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值