码迷,mamicode.com
首页 > 其他好文 > 详细

awk: 报告生成器 简单用法

时间:2016-01-07 01:22:46      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:awk: 简单用法 学生作业

  awk: 报告生成器 简单用法

1:tail -5  /etc/fstab | awk ‘{print $2,$4}‘

打印/etc/fstab 文件里后五行的第2和第4段内容


[root@marco-linux temp]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Dec 30 06:43:45 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=42725ac6-787d-4be4-a766-a4b9325eba7e /                       ext4    defaults        1 1
UUID=ec7cf699-9e55-4305-a463-859f8ba83f3b /boot                   ext4    defaults        1 2
UUID=52937bf3-72c9-48d7-a05c-72726731c995 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0

[

root@marco-linux temp]# tail -5 /etc/fstab |awk ‘ {print $2,$4}‘
swap defaults
/dev/shm defaults
/dev/pts gid=5,mode=620
/sys defaults
/proc defaults




[root@marco-linux temp]# tail -5 /etc/fstab |awk ‘ {print $2,$4}‘

 命令解释: |左边表示取出 /etc/fstab 的后五行

 awk ‘ {print $2,$4}‘  取出2,4段的文件内容

  “awk ‘ {print #,#}‘ ” 是基本使用格式,其实“ ‘  {”之间可以放置输出内容的分隔符


    下边我们用制定变量模式来做个例子:


[root@marco-linux temp]# awk -v FS=: ‘  {print $1,$7}‘ /etc/passwd | head -5
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nolo

gin


"-v"表示我后边要定义变量了 “FS”是input Field Seperator缩写,意思为输入字段的分隔符,默认为空白,我这里认为定义FS=:

当然我们其实可以直接使用-F 选项 “awk -F:‘  {print $1,$7}‘ /etc/passwd | head -5” 这个根上边的结果是一样的


与FS相反,OFS即 Output  Field Seperator. 我们举个例子说明他的用法

[root@marco-linux temp]# awk -F: -v OFS=:  ‘{print $1,$7}‘ /etc/passwd |head -5
root:/bin/bash
bin:/sbin/nologin
daemon:/sbin/nologin
adm:/sbin/nologin
lp:/sbin/nologin



其实就在前边多个变量定义“ OFS=:”

[root@marco-linux temp]# awk -F: -v OFS=:  ‘{print $1,$7}‘ /etc/passwd |[root@marco-linux temp]# awk -F: -v OFS=#  ‘{print $1,$7}‘ /etc/passwd |head -5
root#/bin/bash
bin#/sbin/nologin
daemon#/sbin/nologin
adm#/sbin/nologin
lp#/sbin/nologin
 换成#也一样


 



RS :input record seperator 输入时的换行符号

ORS: ouput record seperator  输出时的换行符号


例如 :awk -v RS=‘:‘ ‘{print $0}‘ /etc/passwd |tail -5
[root@marco-linux temp]# awk -v RS=‘:‘ ‘{print $0}‘ /etc/passwd  |tail -5
500
marco-chen
/home/marco
/bin/bash
[root@marco-linux temp]# tail  -1  /etc/passwd
marco:x:500:500:marco-chen:/home/marco:/bin/bash


可以看出,他是以:为分隔符,把每一个字段单独放一行。

awk -v ORS=‘:‘ ‘{print $0}‘ /etc/passwd  |tail -5


显示文件中每一行的字段数  “NF :number of field  字段数量”

awk ‘ {print NF}‘ /etc/fstab



显示文件中每一行的最后一个字段内容

awk ‘ {print $NF}‘ /etc/fstab
1
2
3
4
5
6
.
.
多文件单独计数:FNR 
awk ‘ {prin FNR}‘ /etc/fstab  /etcissue
1
2
.
.
1
2
.
.
awk ‘ {print FILENAME}‘ /etc/passwd

自定义变量:

     

(1)   -v var=value
      (2)   program中直接定义   可以直接引用不用$符号
             例如 :awk -v test=‘good luck‘ ‘{print test}‘  /etc/fstab 
                        good luck
good luck
good luck
good luck
good luck
good luck
good luck
。。。。。

                        fstab中有多少行就显示多少个goodluck

                      awk ‘{test="good luck";print test}‘ /etc/fstab 

                       这条操作同上一条一样

    

        简单应用就到这里吧下边的太难了


awk: 报告生成器 简单用法

标签:awk: 简单用法 学生作业

原文地址:http://10999737.blog.51cto.com/10989737/1732282

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!