awk详解

1、什么是awk?

awk是一种编程语言,用于在linux/unix下对文本的数据进行数据处理。它支持用户自拟定函数和动态正则表达式等先进功能;它在命令行中更多是作为脚本来使用;awk有很多内建的功能如函数、数组等,灵活性是awk最大的优势。

2、 常用命令选项

  • -F fs : fs指定输入分隔符,fs可以是字符串或正则表达式,如 -F
  • -V var=value:赋值一个用户定义变量,将外部变量传递给awk
  • -f scripfile:从脚本文件读取awk命令

3、awk变量

变量:内置和自拟定变量,每个变量前加 -v 命令选项

4、内置变量

(1)格式

  • FS:输入字段分隔符,默认为空白字符
  • OFS:输出字段分隔符,默认为空白字符
  • RS:输入记录分隔符,指定输入时的换行符,原换行符仍有效
  • ORS:输出记录分隔符,输出时用指定符号代替换行符
  • NF:字段数量,共有多少字段,$NF引用最后一列
  • NR:行号,后可跟多个文件
  • FNR:各文件分别计数,行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
  • FILENAME:当前文件名
  • ARGC:命令行参数的个数
  • ARGV:数组,保存的是命令行所给定的各参数,查看参数

(2)演示

[root@CentOS centos]# cat awkdemo
hello:world
linux:redhat:lalala:hahaha
along:love:youou
[root@CentOS centos]# awk -v FS=':' '{print $1,$2}' awkdemo
#FS指定输入分隔符
# $1,$2是第一个字段和第二个字段

在这里插入图片描述

[root@CentOS centos]# awk -v FS=':' -v OFS='---' '{print $1,$2}' awkdemo
#OFS指定输出分隔符

在这里插入图片描述

[root@CentOS centos]# awk -v RS=':' '{print $1,$2}' awkdemo
#RS指定符号换行符

在这里插入图片描述

[root@CentOS centos]# awk -v FS=':' -v ORS='---' '{print $1,$2}' awkdemo
#ORS用指定符号代替换行

在这里插入图片描述

[root@CentOS centos]# awk -F: '{print NF}' awkdemo
#NF有多少字段

在这里插入图片描述

[root@CentOS centos]# awk -F: '{print $(NF-1)}' awkdemo
# $(NF-1)倒数第二列

在这里插入图片描述

[root@CentOS centos]# awk '{print NR}' awkdemo
#NR每行行数

在这里插入图片描述

[root@CentOS centos]# awk END'{print NR}' awkdemo

在这里插入图片描述

[root@CentOS centos]# awk BEGIN'{print ARGC}' awkdemo awkdemo1
#ARGC命令行参数的个数,awk一个参数,awkdemo第二个参数,awkdemo1第二个参数

在这里插入图片描述

[root@CentOS centos]# awk BEGIN'{print ARGV[0]}' awkdemo awkdemo1

在这里插入图片描述

5、自拟定变量

自拟定变量(区分字符大小写)

(1)-v var=value

  • 先定义变量,后执行动作print
    在这里插入图片描述
  • 在执行动作print后定义变量
    在这里插入图片描述

(2)在program中直接定义

可以把执行官的动作放在脚本中,直接调用脚本-f
在这里插入图片描述

6、printf命令

(1)格式

printf` `"FORMAT"``, item1,item2, ...
  • 必需指定FORMAT
  • 不会自动换行,需要显示给出换行控制符,\n
  • FORMAT中需要分别为后面每个item指定格式符

(2)格式符

  • %c: 显示字符的ASCII码
  • %d, %i: 显示十进制整数
  • %e, %E: 显示科学计数法数值
  • %f :显示为浮点数,小数%5.1f,带整数、小数点、整数共5位,小数1位,不够用空格补上
  • %g, %G :以科学计数法或浮点形式显示数值
  • %s :显示字符串;例:%5s最少5个字符,不够用空格补上,超过5个还继续显示
  • %u :无符号整数
  • %%: 显示% 自身

(3)修饰符

  • #[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,如%5.1f
  • -:左对齐(默认右对齐),%-15s
  • +:显示数值的正负符号%+d
[root@CentOS centos]# awk -F: 'BEGIN{printf "username            userid\n-----------------------------\n"}{printf "%-20s|%-10.3f\n",$1,$3}' /etc/passwd
username            userid
-----------------------------
root                |0.000    
bin                 |1.000
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年ꦿ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值