cut
cut - 在文件的每一行中提取片断
说明:默认分隔符是制表符
cut [选项参数] filename
-f 提取通过分割符分割之后的第几列,与-d一起使用
-d 分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c 按字符进行切割。多用于汉字。用在英文上跟-b没有什么区别
-b 按字节进行切割
-s 不包括那些不含分隔符的行,只与-f参数一起使用
awt
awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename
pattern:表示 awk 在数据中查找的内容,就是匹配模式(正则)
action:在找到匹配内容时所执行的一系列命令
print 输出
示例:'BEGIN{print "user, shell"} {print $1","$7}END{print "dahaige,/bin/zuishuai"}'
-F 指定输入文件分隔符
-v 赋值一个用户定义变量
i=1
示例:'{print $3+i}'
内置变量
FILENAME 文件名
NR 已读的记录数(行号)
NF 浏览记录的域的个数(切割后,列的个数)
案例实操
1 环境准备
cut.txt
shen zhen
jie yang
guang zhou
dong guan
mao ming
hua zhou
hui zhou
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
脚本文件:demo5
#!/bin/bash
echo "====================================cut=========================================="
echo "==========================cut.txt文件内容=================="
cat /root/桌面/cut.txt
echo "=======================1)切割cut.txt第一列================="
cut -f 1 -d " " cut.txt
echo "=====================2) 切割cut.txt第二,三列================"
cut -f 2,3 -d " " cut.txt
echo "====================3) 在cut.txt文件中切割出guang================="
cut -f 1 -d " " cut.txt | grep guang
echo "=============4)选取系统PATH变量值,第2个":"开始后的所有路径:========"
echo $PATH | cut -d ":" -f 3-
echo "=================5)切割ifconfig后打印的ip地质================"
ifconfig ens33 | grep netmask | cut -f 10 -d " "
echo " "
echo " "
echo " "
echo "====================================awk==============================================="
echo "1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列"
awk -F : '/^root/{print $7}' passwd
echo "2) 搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”分割"
awk -F : '/^root/{print $1","$7}' passwd
echo "3) 只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell。在最后一行添加“lzw,/bin/zuishuai"
awk -F : 'BEGIN{print "user shell"}{print $1","$7}END{print "lzw,/bin/zuishuai"}' passwd
echo "4) 将passwd文件中的用户id增加数值1并输出"
awk -F : -v i=1 '{print $3+i}' passwd
echo " "
echo " "
echo " "
echo "====================================awk内置变量=============================="
echo "===============1)统计passwd文件名,每行的行号,每行的列数============="
awk -F : '{print "文件名:"FILENAME"行号:"NR"列数"NF}' passwd
echo "===============2) 查询ifconfig命令输出结果中的空行所在的行号==========="
ifconfig | awk '/^$/{print NR}'
echo "===============3) 切割IP=============================================="
ifconfig ens33 | grep netmask | awk -F " " '{print $6}'
2 结果
[root@demo01 桌面]# sh demo5
====================================cut==========================================
==========================cut.txt文件内容==================
shen zhen
jie yang
guang zhou
dong guan
mao ming
hua zhou
hui zhou
=======================1)切割cut.txt第一列=================
shen
jie
guang
dong
mao
hua
hui
=====================2) 切割cut.txt第二,三列================
zhen
yang
zhou
guan
ming
zhou
zhou
====================3) 在cut.txt文件中切割出guang=================
guang
=============4)选取系统PATH变量值,第2个:开始后的所有路径:========
/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
=================5)切割ifconfig后打印的ip地质================
192.168.100.101
====================================awk===============================================
1)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列
/bin/bash
2) 搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”分割
root,/bin/bash
3) 只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell。在最后一行添加“lzw,/bin/zuishuai
user shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
sync,/bin/sync
shutdown,/sbin/shutdown
halt,/sbin/halt
lzw,/bin/zuishuai
4) 将passwd文件中的用户id增加数值1并输出
1
2
3
4
5
6
7
8
====================================awk内置变量==============================
===============1)统计passwd文件名,每行的行号,每行的列数=============
文件名:passwd行号:1列数7
文件名:passwd行号:2列数7
文件名:passwd行号:3列数7
文件名:passwd行号:4列数7
文件名:passwd行号:5列数7
文件名:passwd行号:6列数7
文件名:passwd行号:7列数7
文件名:passwd行号:8列数7
===============2) 查询ifconfig命令输出结果中的空行所在的行号===========
9
18
26
===============3) 切割IP==============================================
192.168.100.255
[root@demo01 桌面]#