awk入门

linux之awk文本处理入门

1、awk简介

awk是一种编程语言,用于linux下对文本和数据进行处理。数据可以来来自标准输入一个或多个文件,或其他命令的输出

更多作为脚本来使用。

awk处理数据的方式:逐行扫描文件,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定动作,则把匹配的行显示到标准输出(屏幕)。如果没有指定模式,则所有被操作所指定的行都被处理。

2、awk 两种语法格式

awk [options] ‘commands’ filenames

awk [options] -f awk-script-file filenames

== options:

-F 定义输入字段分隔符,默认的分割符号是空格或者制表符

[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# awk '{print $1}' /etc/hosts    //获取hosts文件的第一列
127.0.0.1
::1
[root@localhost ~]# awk '{print $1}' /etc/passwd   //默认分隔符为空格或者\t
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@localhost ~]# awk -F ":" '{print $1}' /etc/passwd  //指定分隔符为:
root
bin
daemon

== command:

BEGIN{ }{ }END{ }
行处理前(发生在读文件之前)行处理行处理后
通常用于定义一些变量,例如BEGIN{FS=’:’;OFS=’—’}
FS:字段分隔符
OFS:Out of Field Separator,输出字段分隔符
[root@localhost ~]# awk 'BEGIN{print 3}{print "ok"}END{print "------"}'  //后面没有文件依然有输出
3
[root@localhost ~]# awk 'BEGIN{print 3}{print "ok"}END{print "------"}' /etc/hosts
3      //行处理前
ok     //逐行处理
ok     //逐行处理
------ //行处理后
[root@localhost ~]# awk 'BEGIN{FS=":"}{print $1}END{print "------"}' /etc/passwd //FS:字段分隔符
root
bin
daemon
[root@localhost ~]# awk 'BEGIN{FS=":";OFS="---"}{print $1,$2}END{print "------"}' /etc/passwd  // OFS:Out of Field Separator,输出字段分隔符
root---x
bin---x
daemon---x

== awk命令格式

awk ‘pattern’ filename
实例:awk ‘/root/’ /etc/passwd //正则表达式

awk ‘{action}’ filename
实例:awk ‘{print $1}’ /etc/passwd //action模式
awk ‘pattern {action}’ filename

实例:awk ‘/root/{print $1}’ /etc/passwd
awk 'BEGIN{FS=":"} ‘/root/{print $1}’ /etc/passwd

command | awk ‘pattern {action}’
实例:df -P |grep ‘/’ |awk ‘$4>25000{print $4}’ //管道模式

[root@localhost ~]# awk  '/root/'  /etc/passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# awk -F: '{print $1,$3}'  /etc/passwd 
root 0
bin 1
//原理解读:1、awk使用一行作为输入,并将这一样赋给内部变量$0;
          2、然后行被``被分解成字段,每个字段存储在已编号的变量中,从$1开始,最多可以到100个字段
          3、awk是如何知道用空格还是其他的分割符来分割字段呢?因为有一个内部变量`FS`来确定字段分隔符。
          4、awk打印字段时,将使用print函数打印。awk在打印字段之间加上空格。因为$1$3之间有一个逗号。
          逗号比较特殊,他映射了另外一个内部变量`OFS`,`OFS`默认分隔符是空格。
[root@localhost ~]# awk '/root/{print $1}'  /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# awk 'BEGIN{FS=":"}/root/{print $1}'  /etc/passwd 
root
operator
[root@localhost ~]# df -P
文件系统        1024-块    已用    可用 配额 挂载点
/dev/sda3      18555904 9297296 9258608  51% /
devtmpfs        1917956       0 1917956   0% /dev
tmpfs           1932652       0 1932652   0% /dev/shm
tmpfs           1932652    9344 1923308   1% /run
tmpfs           1932652       0 1932652   0% /sys/fs/cgroup
/dev/sda1        303780  160340  143440  53% /boot
tmpfs            386532      52  386480   1% /run/user/1000
tmpfs            386532       0  386532   0% /run/user/0
/dev/loop0      4414592 4414592       0 100% /mnt
[root@localhost ~]# df -P |grep '/' |awk '$4>25000{print $4}'
9258608
1917956
1932652
1923308
1932652
143440
386480
386532
``
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值