GNU Project: GNU项目宗旨开发一个不是unix的操作系统
unix —》版权之争 AT&T 美国的电信 --》中国电信 —》移动 --》中国移动
开源 —》加州大学–》伯克利分校 bsd --》大卖 99%的代码修改了
google --》Android --》华为,小米
全球IT界有正义感 --》理查德 自由软件基金会 -->带头大哥 —》不是unix的系统–>GNU + linus
GNU :
操作系统由:内核+应用程序+shell+库等 —》GNU/LINUX —>linux
gcc
AWK programming language --》awk是一门编程语言 --》文本处理–》截取
变量,函数,流控,数组
The original version of UNIX awk was designed and implemented by Alfred Aho, Peter Weinberger, and Brian Kernighan
of Bell Laboratories. Brian Kernighan continues to maintain and enhance it.
awk本身就是一种编程语言
awk有什么用?
截取字段
字段:
一段字符串 —》一段很多字符组成了一个字符串
id name grade sex
1 cali 80 m一列–》一个字段 field
列 column
一行里可以包含很多字段
行 line row record
一条记录其实就是一行
awk -F":" '{print $1,$2}' /etc/passwd
awk -F: '{print $1,$2}' /etc/passwd
-F 指定输入分隔符 ,默认的分隔符是空白(空格+tab,enter)
print是awk内部的命令,用于输出
, 引用输出分隔符,默认输出分隔符是一个空格
分隔符
1.输入分隔符
-F
2.输出分隔符
定义OFS="#"
output field separater
[root@lier 704]# awk -F: 'OFS="*"{print $1,$3,$4}' /etc/passwd
root*0*0
bin*1*1
daemon*2*2
adm*3*4
lp*4*7
sync*5*0
shutdown*6*0
halt*7*0
mail*8*12
operator*11*0
games*12*100
BEGIN{commands}和END{commands}可以没有,如果有都只执行一次;二pattern{commands}在读取每一行时都会执行
[root@lier 704]# awk -F: 'BEGIN{print "==========start==========="} $3>500 && $3<2000{print $1,$3} END{print "=========end======="}' /etc/passwd
==========start===========
systemd-bus-proxy 999
systemd-network 998
polkitd 997
liwenqian 1000
bangyou 1001
lwq 1002
chx 1004
lx 1005
liuyi 1006
zengqilin 1007
zhengjian 1008
lier 1009
lqt 1010
wang 1012
xiaowei 1013
chrony 996
luoyawei 1041
wuyazi 995
=========end=======
示例:
num=0 自定义变量
预定义变量:
NR number of record 行号
NF number of field 字段数
length() 内置的函数,用来统计字符串的长度
$NF -->最后一个字段
$(NF-1) --> 倒数第2个字段
# 查看第1个字段和倒数第3个字段
[root@lier 704]# df -Th|awk '{print $1,$(NF-2)}'
文件系统 可用
devtmpfs 898M
tmpfs 910M
tmpfs 901M
tmpfs 910M
/dev/mapper/centos-root 9.7G
/dev/sda1 330M
tmpfs 182M
示例:
[root@localhost 74]# cat /etc/passwd|egrep "feng"|awk -F: '{print $1,$3}'
fengdeyong 1011
# /feng/表示为每一行都匹配是否有"feng",有则输出这一行的第1,3字段
[root@localhost 74]# cat /etc/passwd|awk -F: '/feng/{print $1,$3}'
fengdeyong 1011
[root@localhost 74]#
cat /etc/passwd|awk -F: ‘/feng/{print $1,$3}’ 和 awk -F: ‘/feng/{print $1,$3}’ /etc/passwd 的区别?
cat /etc/passwd|awk -F: ‘/feng/{print $1,$3}’ 启动了2进程,消耗的系统资源多。当文件比较大时,使用cat命令会额外的消耗 cpu,内存,磁盘IO,时间