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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值