【Linux shell学习笔记-11-gawk基础】

gawk程序是Unix中的原始awk程序的GNU版本,它能提供一个类编程环境来修改和重新组织文件,完成诸如从文本文件中提取数据、生成报告等任务。

在gawk中我们可以做下面的事情:

  • 定义变量来保存数据;
  • 使用算术和字符串操作符来处理数据;
  • 使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑;
  • 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告;

gawk命令格式

gawk <options> <program file>

gawk options 选项:

  • -F fs:指定行中划分数据字段的字段分隔符
  • -f file:从指定的文件中读取程序
  • -v var=value:定义gawk程序中的一个变量及其默认值
  • -mf N:指定要处理的数据文件中的最大字段数
  • -mr N:指定数据文件中的最大数据行数
  • -W keyword:指定gawk的兼容模式或警告等级

从命令行读取脚本

gawk '{print "Hello World!"}'

This is a test
Hello World!
hello

上面的命令行程序并没有指定文件名,所以gawk程序会从STDIN接收数据,它会等待从STDIN输入之后才会执行print,输入完毕后gawk程序会等待EOF(ctrl+D)字符终止程序的执行

使用数据字段变量
可以使用-F选项来指定分隔符将一个文本行分隔成若干数据字段(默认空格)

  • $0代表整个文本行;
  • $1代表文本行中的第1个数据字段;
  • $2代表文本行中的第2个数据字段;
  • $n代表文本行中的第n个数据字段;
  • $NF代表文本行中的最后一个数据字段
    打印"/etc/passwd"文件中的第1个字段,即用户名
gawk -F: '{print $1}' /etc/passwd

root
bin
daemon
adm
lp
sync
shutdown
halt
mail

在脚本程序中使用多个命令
在gawk编程中,允许将多个命令组成一个功能更多的程序,只需要在每个命令后面添加分号(;)即可。

echo "My name is Rich" | gawk '{$4="Christine"; print $0}'

My name is Christine

也可以用次提示符一次一行地输入程序脚本命令。

 gawk '{
> $4="Christine"
> print $0}'
My name is Rich

My name is Christine

在文件中读取程序
使用-f选项指定程序文件,程序文件中包含了需要执行的gawk程序代码

cat script2.gawk
{print $1 "'s home directory is " $6}

gawk -F: -f script2.gawk /etc/passwd

root's home directory is /root
bin's home directory is /bin
daemon's home directory is /sbin
adm's home directory is /var/adm
lp's home directory is /var/spool/lpd

在处理数据前后运行脚本
使用关键字'BEGIN'在处理数据前运行脚本

gawk 'BEGIN {print "The data3 File Contents:"} 
> {print $0}' data3.txt

The data3 File Contents:
Line 1
Line 2
Line 3

使用关键字'END'在处理数据前运行脚本

gawk 'BEGIN {print "The data3 File Contents:"} 
> {print $0}
> END {print "End of File"}' data3.txt

The data3 File Contents:
Line 1
Line 2
Line 3
End of File

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容