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入门