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
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐