linux 文本处理工具 cut 和 awk

linux 文本处理工具 cut 和 awk

cut

cut 剪切数据。从文件的每一行剪切字节、字符、和字段,并将这些字节、字符和字段输出。

1. 基本用法

cut [选项参数] 文件名
默认分隔符是制表符

2. 选项参数说明

-f 所提取的列号
-d 分隔符,按照指定分隔符分割列
-c 按字符进行切割,后加数字表示第几列

3. 案例演示

[root@daidai tmp]# cat ./data.txt 
zhanglaosan 20 man zhangsan.com
lilaosi 21 man lisi.cn
walaowu 20 woman wangwu.org

# 取第一列
[root@daidai tmp]# cut -d " " -f 1 ./data.txt 
zhanglaosan
lilaosi
walaowu

# 取第1,3列
[root@daidai tmp]# cut -d " " -f 1,3  ./data.txt 
zhanglaosan man
lilaosi man
walaowu woman

# 取ifconfig ens33结果中的ip地址
[root@daidai tmp]# ifconfig ens33 | grep broadcast | cut -d " " -f 10
192.168.100.101

解释一下上面的为什么是10

在这里插入图片描述

前面绿色的部分为8个“ ”,后一部分为1个“ ”,可以理解为取第10个“ ”前面的那一列。

awk

把文件逐行读入,默认以空格为分隔符进行切分,再进行处理。

1. 基本用法

awk [选项参数] '/parttern1/{actiion1} /parttern2/{actiion2}...' 文件名
pattern:awk在数据中心查找的内容,就是匹配模式。
action:在找到匹配内容时执行的命令。

2. 选项参数说明

-F 指定分割符
-v 赋值一个用户定义变量

3. 案例演示

[root@daidai tmp]# cat ./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
sync:x:5:0:sync:/sbin:/bin/sync

# 搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 7 列。
[root@daidai tmp]# awk -F : '/^root/{print}' ./passwd 
root:x:0:0:root:/root:/bin/bash
[root@daidai tmp]# awk -F : '/^root/{print $7}' ./passwd 
/bin/bash

# 搜索 passwd 文件以 root 关键字开头的所有行,并输出该行的第 1 列和第 7 列,中间以“,”号分割。
[root@daidai tmp]# awk -F : '/^root/{print $1 "," $7}' ./passwd 
root,/bin/bash

# 只显示/etc/passwd 的第一列和第七列,以逗号分割,且在所有行前面添加列名 user,shell 在最后一行添加"end..."。
[root@daidai tmp]# awk -F : 'BEGIN{print "user, bash"} {print $1  ", " $7} END{print "end..."}' ./passwd 
user, bash
root, /bin/bash
bin, /sbin/nologin
daemon, /sbin/nologin
adm, /sbin/nologin
lp, /sbin/nologin
sync, /bin/sync
end...

# awk 内置变量
FILENAME 文件名
NR 行号
NF 列数

# 统计 passwd 文件名,每行的行号,每行的列数
[root@daidai tmp]# awk -F : '{print "filename:" FILENAME " linenum:" NR " col:" NF}' ./passwd 
filename:./passwd linenum:1 col:7
filename:./passwd linenum:2 col:7
filename:./passwd linenum:3 col:7
filename:./passwd linenum:4 col:7
filename:./passwd linenum:5 col:7
filename:./passwd linenum:6 col:7

# 取ifconfig ens33结果中的ip地址
[root@daidai tmp]# ifconfig ens33 | awk '/broadcast/{print $2}' 
192.168.100.101

你可能感兴趣的:(shell,linux,服务器,运维)