Linux经典常用命令(AWK/SED/CUT/SORT)看完之后轻轻松松驾驭最难命令


Linux里面的命令非常多,有一些命令是比较难以理解的,例如AWK SED等,今天就对大数据经常用到的这几个命令进行详细的了解。

AWK

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。他默认是按行进行处理的,我之前有写过一篇AWK的讲解,里面有充足的案例来理解,可以看看:Linux最难命令awk:详解解读

AWK的语法

awk [选项参数] 'script' var=value file(s)awk [选项参数] -f scriptfile var=value file(s)

选项的参数说明:

-F 后面接的是分隔符 例如 -F: 代表的是用:分割  -F, 代表的是用,分割
-v 后面接的是定义的变量 例如  -v a=1 定义好了变量a

案例讲解

编辑好文本文件, vim log.txt:

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

用法1:awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ” 只能用单引号
在默认的情况下,每行按空格或者TAB分割

输出文本内容的第1,4项:

[zhang@hadoop102 datas]$ awk '{print $1,$4}' log.txt
2 a
3 like
This's 
10 orange,apple,mongo

格式化输出:

[zhang@hadoop102 datas]$  awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
2        a         
3        like      
This's             
10       orange,apple,mongo

用法2:awk -F #-F相当于内置变量FS, 指定分割字符
我们编辑的好的文本内容是按照空格切割,如果我输入的是用:切割,输出的结果:

[zhang@hadoop102 datas]$ awk -F: '{print $1,$2}' log.txt
2 this is a test 
3 Are you like awk 
This's a test 
10 There are orange,apple,mongo 

文本中没有:的话,默认就无法切割,全部输出。
接下来,按照空格输出,注意,-F后面的切割符号应该添加 ’ ’

[zhang@hadoop102 datas]$ awk -F ' ' '{print $1,$2}' log.txt
2 this
3 Are
This's a
10 There

用法3: -V设置变量

[zhang@hadoop102 datas]$ awk -v a=1 '{print $1,$1+a}' log.txt
2 3
3 4
This's 1
10 11

SED

Linux sed 命令是利用脚本来处理文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

基本语法

--version   显示sed版本
-e script   允许多个脚本指令被执行
-f script-file  从文件中读取脚本指令,对编写自动脚本程序很实用

案例讲解

数据准备:vim test.txt:

DEVICE=eno16777736
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0

GATEWAY=192.168.0.254

ONBOOT=yes

查看文本的数据和对应行号:

[zhang@hadoop102 datas]$ cat -n test.txt 
     1	DEVICE=eno16777736
     2	BOOTPROTO=static
     3	IPADDR=192.168.0.1
     4	NETMASK=255.255.255.0
     5	
     6	GATEWAY=192.168.0.254
     7	
     8	ONBOOT=yes

第二行后追加TYPE=Ethernet:

[zhang@hadoop102 datas]$ sed '2a TYPE=Ethernet' test.txt
DEVICE=eno16777736
BOOTPROTO=static
TYPE=Ethernet
IPADDR=192.168.0.1
NETMASK=255.255.255.0

GATEWAY=192.168.0.254

ONBOOT=yes

第三行前追加TYPE=Network:

[zhang@hadoop102 datas]$ sed '3i TYPE=Network' test.txt
DEVICE=eno16777736
BOOTPROTO=static
TYPE=Network
IPADDR=192.168.0.1
NETMASK=255.255.255.0

GATEWAY=192.168.0.254

ONBOOT=yes

将样本文件中的所有yes替换为no:

[zhang@hadoop102 datas]$ sed 's/yes/no/g' test.txt
DEVICE=eno16777736
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0

GATEWAY=192.168.0.254

ONBOOT=no

上面是依据行号定位操作对象(地址),如2a即第二行后追加。实际工作中,可能大多数情况你并不确定你要操作对象(地址)的行号,这时更多的会使用正则表达式确定操作对象(地址)。下面是使用正则表达式定位操作行的示例:
匹配到包含ONBOOT的行,并在其后添加TYPE=Ethernet:

[zhang@hadoop102 datas]$ sed '/ONBOOT/a TYPE=Ethernet' test.txt 
DEVICE=eno16777736
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0

GATEWAY=192.168.0.254

ONBOOT=yes
TYPE=Ethernet

匹配GATEWAY开始的行,并删除该行:

[zhang@hadoop102 datas]$ sed '/^GATEWAY/d' test.txt 
DEVICE=eno16777736
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0


ONBOOT=yes

我们的操作指令可以写入到脚本文件中,并通过sed的-f选项读取,脚本文件中的注释行是以#开始的行,如果#后面的字符为n,则屏蔽Sed程序的自动输出功能,等同于命令选项-n。创建一个sed脚本,内容如下:
脚本内容为匹配到空白行后,删除该行

#!/bin/bash
/^$/d
[zhang@hadoop102 datas]$ cat sed.sh 
#!/bin/bash
/^$/d
[zhang@hadoop102 datas]$ sed -f sed.sh test.txt 
DEVICE=eno16777736
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
ONBOOT=yes

CUT

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对"行"来进行分析的,并不是整篇信息分析的。

基本语法

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

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

主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。

案例讲解

输入who命令

[zhang@hadoop102 datas]$ who
zhang    pts/0        2021-10-24 10:17 
zhang    pts/1        2021-10-21 09:21 

我们要截取每一行的第三个字节

[zhang@hadoop102 datas]$ who|cut -b  3
a
a

截取第3,第11,第12个字节:

[zhang@hadoop102 datas]$ who|cut -b  3,11,12
ats
ats

Sort

用于将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。

基本语法

-r :倒序排序

-n:按照number顺序排列

-k指定第几列或第几列的第几个字符。

案例讲解

数据准备,vim number.txt:

[zhang@hadoop102 datas]$ cat number.txt 
45
82
99
28
35
15
76
65
8
29
4
109

-n的使用,是按照number的升序顺序排列,第一个字符相同的情况下,对下一个字符进行排列:

[zhang@hadoop102 datas]$ sort -n number.txt 
4
8
15
28
29
35
45
65
76
82
99
109

-r: 逆序排列,从大到小:

[zhang@hadoop102 datas]$ sort -r number.txt 
99
82
8
76
65
45
4
35
29
28
15
109

-k 按照指定的列 排列,通常和-t一起配合使用,-t后面接的是分隔符:

[zhang@hadoop102 datas]$ cat fruit.txt 
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

[zhang@hadoop102 datas]$ sort -k 2 -t : fruit.txt 
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

一般-nrk可以结合在一起使用,结合在一起使用过的时候,-k是写在末尾,同时按照number倒序排列

[zhang@hadoop102 datas]$ sort -nrk 3 -t: fruit.txt
banana:30:5.5
orange:20:3.4
apple:10:2.5
pear:90:2.3
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里Coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值