ITPub博客

首页 > Linux操作系统 > Linux操作系统 > AWK学习

AWK学习

原创 Linux操作系统 作者:453603647 时间:2014-10-10 23:30:55 0 删除 编辑
sed -n '2p'       获取第二行

seq 100|awk '$1%7==0 ||$1 ~/7/{print $0}'         #1-100中7的倍数和包括7的数字
~:匹配符

awk -F ':' '{print $2}'      -F是设定以“:”作为分隔符,打印出第二列的信息
|                 管道符,将前一个命令的正确输出作为后一个命令的输入处理
awk '/^root/{print $0}' /etc/passwd      匹配到开头为root的行,将改行打印出来


cat /etc/passwd|awk -F':' '{if ($1=="root") print $0}'     判断第一列的值,是“root”,则将该行打印出来
awk -F ':' '{if ($1=="root") print $0}' /etc/passwd        判断第一列的值,是“root”,则将该行打印出来


awk -F':' '{if ($3>=30 && $3<=40) print $0}' /etc/passwd    用户id在30和40范围内的用户信息
awk -F':' '$3>=30 && $3<=40{print $0}' /etc/passwd


/etc/passwd 用户信息文件总共7列,用冒号‘:’分隔
amanda:    x:      33:    6:     Amanda user:      /var/lib/amanda:    /bin/bash
用户名   密码项      UID    GID      用户描述信息        主目录               登录bash


UID:用户ID(user)
GID:组ID(group)




awk中的内置变量
NF  每行的字段数
NR 行号信息

例1:
awk -F ':' '{print NR,$0}' /etc/passwd        NR 行号信息         
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 news:x:9:13:news:/etc/news:



例2:
awk -F ':' '{print NF,$0}' /etc/passwd|head -n 5     显示前5行的字段数 
7 root:x:0:0:root:/root:/bin/bash
7 bin:x:1:1:bin:/bin:/sbin/nologin
7 daemon:x:2:2:daemon:/sbin:/sbin/nologin
7 adm:x:3:4:adm:/var/adm:/sbin/nologin
7 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

例3:
awk -F':' 'NR<6{print NF,$0}' /etc/passwd    显示前5行的字段数
7 root:x:0:0:root:/root:/bin/bash
7 bin:x:1:1:bin:/bin:/sbin/nologin
7 daemon:x:2:2:daemon:/sbin:/sbin/nologin
7 adm:x:3:4:adm:/var/adm:/sbin/nologin
7 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin




例1:
awk -F':' 'NR>4 && NR<11 {print NR,$0}' /etc/passwd           将文件5-10行的行号和当前行打印出来
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 news:x:9:13:news:/etc/news:



例2:
awk -F':' 'NR%2!=0{print NR,$0}' /etc/passwd          打印奇数行
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
13 games:x:12:100:games:/usr/games:/sbin/nologin




例3:
awk -F':' 'NR%2==0{print NR,$0}' /etc/passwd 打印偶数行
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
10 news:x:9:13:news:/etc/news:
12 operator:x:11:0:operator:/root:/sbin/nologin



printf:格式化输出
%-15s
-:左对齐
15:不足15个补空格
%s:字符
%d:数字
\n:换行
注意:格式与输出列之间要有逗号


awk -F':' 'BEGIN{printf "%-15s%-10s%10s\n","用户名","UID","GID"};$3!=$4{printf "%-15s%-10d%10d\n",$1,$3,$4}' /etc/passwd
用户名         UID              GID
adm            3                  4
lp             4                  7
sync           5                  0
shutdown       6                  0
halt           7                  0





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26705770/viewspace-1294715/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: vim学习整理
请登录后发表评论 登录
全部评论
  • 博文量
    6
  • 访问量
    15793