欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

awk入门

程序员文章站 2022-06-24 21:30:51
...

linux之awk文本处理入门

1、awk简介

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

更多作为脚本来使用。

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

2、awk 两种语法格式

awk [options] ‘commands’ filenames

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

== options:

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

[[email protected] ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[[email protected] ~]# awk '{print $1}' /etc/hosts    //获取hosts文件的第一列
127.0.0.1
::1
[[email protected] ~]# 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

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

== command:

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

[[email protected] ~]# awk  '/root/'  /etc/passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]# 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`默认分隔符是空格。
[[email protected] ~]# awk '/root/{print $1}'  /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]# awk 'BEGIN{FS=":"}/root/{print $1}'  /etc/passwd 
root
operator
[[email protected] ~]# 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
[[email protected] ~]# df -P |grep '/' |awk '$4>25000{print $4}'
9258608
1917956
1932652
1923308
1932652
143440
386480
386532
``

上一篇: Moment.js

下一篇: Linux awk入门