day 18 三剑客之awk

一、课前回顾:

例1 找出/etc目录下以.conf 结尾文件复制到/tmp下面

cp `find /etc -type f -name '*.conf'` /tmp/

[root@wolf1 /data]# find /etc -type f -name '*.conf' |xargs cp -t /tmp/aaa/

[root@wolf1 /data]# find /etc -type f -name '*.conf' -exec cp -a {}  /backup/aaa/ \;

[root@wolf1 /data]# find /etc -type f -name '*.conf' |xargs -i cp /tmp/aaa/

例2 打包备份/etc目录到/backup 下面 保证每天备份的压缩包名字不同

tar zcf  /backup/wtc_`date +%F`.tar.gz /etc

例3 stat /etc/hosts结果中取出644

[root@wolf1 ~]# stat /etc/hosts |sed -rn '4s#(^.*\(0)(.*)(/-.*)#\2#gp'
644

[root@wolf1 ~]# stat /etc/hosts |sed -rn '4s#^.*\(0(.*)/-.*#\1#gp'
644

二、awk

1.awk格式

sed '找谁干啥'
awk '找谁{干啥}'
找谁 条件 模式
干啥 命令 动作 print

2.awk执行过程

3.取行与取列

1)行 (record记录)
取行 NR ===Number of Record 记录行号

[root@wolf1 /data]# awk 'NR==1' lidao.txt
101,oldboy,CEO

[root@wolf1 /data]# sed -n '/oldboy/p' lidao.txt
101,oldboy,CEO

2)列(field 字段)

$NF最后一列
-F指定分隔符

显示oldboy.txt的第4行的第1列 第2列和第4列 
[root@wolf1 ~]# sed -n '4p' oldboy.txt |awk '{print $1,$2,$4}'
I like ball

[root@wolf1 ~]# awk 'NR==4{print $1,$2,$4}' oldboy.txt 
I like ball

4.过滤

1)比较:

找出/etc/passwd 第3列中大于999的行
[root@wolf1 ~]# awk -F":" '$3>999' /etc/passwd
long:x:1000:1000::/home/long:/bin/bash
oldboy:x:1002:1002::/home/oldboy:/bin/bash

显示/etc/passwd中第4列大于0 并且小于1000的行
[root@wolf1 ~]# awk -F":" '$4>0 && $4<1000' /etc/passwd

[root@wolf1 ~]# df -h | awk '$5+0>10'
/dev/sda1       197M  105M   93M  54% /boot

你可能感兴趣的:(day 18 三剑客之awk)