awk命令

目录

前言

awk命令

命令格式

awk 的特殊的内建变量

awk常用内置变量

其他内置变量的用法FS、OFS、NR、FNR、RS、ORS

awk高级用法

if语句

总结


前言

awk是非常有用的工具他的功能几乎涵盖了所有的我们工作中可能出现的情况,是我们必须掌握的一项技能。

awk命令

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作
数据可以来自标准输入也可以是管道或文件

命令格式

awk 选项 '模式或条件{操作}' 文件1 文件2 ...
awk -f 脚本文件 文件1 文件2 ..

awk 的特殊的内建变量

FS:指定每行文本的字段分隔符,默认为空格或制表位。
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第 n 个字段(第 n 列)。
FILENAME:被处理的文件名。
RS:行分隔符

awk常用内置变量

$1:代表第一列
$2:代表第二列以此类推
$0:代表整行
NF:一行的列数
NR:行数
[root@localhost ~]# awk -F: '/root/{print $0}' pass.txt    //打印包含root的整行内容
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F: '/root/{print $1}' pass.txt      //打印包含root的行的第一列
root
[root@localhost ~]# awk -F: '/root/{print $1,$6}' pass.txt    //打印包含root的行的第一列和第六列

其他内置变量的用法FS、OFS、NR、FNR、RS、ORS

[root@localhost ~]# awk 'BEGIN{FS=":"}{print $1}' pass.txt     //在打印之前定义字段分隔符为冒号
root
bin
daemon
adm
lp

[root@localhost ~]# awk 'BEGIN{FS=":";OFS="---"}{print $1,$2}' pass.txt    //OFS定义了输出时以什么分隔,$1$2中间要用逗号分隔,因为逗号默认被映射为OFS变量,而这个变量默认是空格
root---x
bin---x
daemon---x
adm---x
lp---x

[root@localhost ~]# awk '{print FNR,$0}' /etc/resolv.conf /etc/hosts   //可以看出FNR的行号在追加当有多个文件时
1 
2 nameserver 114.114.114.114
3 search localdomain
1 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
2 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# awk '{print NR,$0}' /etc/resolv.conf /etc/hosts
1 
2 nameserver 114.114.114.114
3 search localdomain
4 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
5 ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


[root@localhost ~]# awk 'BEGIN{RS=":"}{print $0}' /etc/passwd    //RS:指定以什么为换行符,这里指定是冒号,你指定的肯定是原文里存在的字符
root
x
0
0
root

[root@localhost ~]# awk 'BEGIN{ORS=" "}{print $0}' /etc/passwd   //把多行合并成一行输出,输出的时候自定义以空格分隔每行,本来默认的是回车键

awk高级用法

[root@localhost ~]# a=100
[root@localhost ~]# awk -v b="$a" 'BEGIN{print b}'    //将系统的变量a,在awk里赋值为变量b,然后调用变量b
100
[root@localhost ~]# awk 'BEGIN{print "'$a'"}'   //直接调用的话需要先用双引号再用单引号
10


[root@localhost ~]# awk -vc=1 'BEGIN{print c}'   //awk直接定义变量并引用
1

调用函数getline,读取一行数据的时候并不是得到当前行而是当前行的下一行
[root@localhost ~]# df -h | awk 'BEGIN{getline}/root/{print $0}'
/dev/mapper/centos-root   50G  5.2G   45G   11% /


[root@localhost ~]# seq 10 | awk '{getline;print $0}'   //显示偶数行
2
4
6
8
10
[root@localhost ~]# seq 10 | awk '{print $0;getline}'   //显示奇数行
1
3
5
7
9

if语句

awk的if语句也分为单分支、双分支和多分支
单分支为if(){}
双分支为if(){}else{}
多分支为if(){}else if(){}else{}


总结

我们能利用awk做到非常多的事情。awk是逐行读取的。我们可以用他配合其他命令完成我们日常的几乎所有的工作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值