AWK使用总结6

79 阅读2分钟

引言

  • 本文主要介绍AWK中的一些内置变量(不包含前面已经介绍的常用内置变量),仅供参考。
  • 本文介绍的主要是补充上篇ARGV与ARGC的详细介绍

ARGV与ARGC详细介绍(增删改)

通过ARGV实现修改

# 原本参数的打印
awk 'BEGIN{print ARGV[1]}' a.txt
# 使用ARGV修改后的打印
awk 'BEGIN{ARGV[1]="b.txt"} {print}' a.txt

  • 意思就是本来ARGV[1]其实是表示a.txt的使用如上指令虽然第二个参数还是a.txt但是打印的时候已经变成b.txt了,是有点偷梁换柱的感觉了
  • 但是注意b.txt要加引号,不然就会进行赋值操作
  • 关于执行顺序的问题
    • awk处理玩一个文件后,就会从从ARGV的下一个元素获取参数,如果是一个文件则继续处理,如果是一个变量赋值则执行赋值操作
    • 第二个跳过就是字面意思的跳过,给了俩文件,下一个元素是空就会直接处理第二个文件,也就是打印b.txt内容
# 赋值
awk 'BEGIN{ARGV[1]="var=1"} {print var}' a.txt b.txt
# 当下一个元素为空表示跳过不处理
awk 'BEGIN{ARGV[1]=""} {print}' a.txt b.txt
# 使用"-"来表示从标准输入读取内容
awk 'BEGIN{ARGV[1]="-"} {print}' a.txt b.txt

删除ARGV元素

  • 理解了上面的介绍,删除还有增加就很好理解了
  • 此处使用delete来删除数组元素
awk 'BEGIN{delete ARGV[1]} {print}' a.txt b.txt

增加ARGV元素

  • 增加元素有点不一样,就是它不能通过上面修改部分那个赋值来直接实现增加ARGV元素,必须要先增加ARGC的值,再增加ARGV的元素
    • 比如下图直接赋值或者像python中的字典直接添加就会进入,像上面的-一样来执行标准输入的输出(有点抽象哈,可以实践体会一下),就是这个第二个参数没有写,来进行添加,而不是像python的list中添加元素那样哈,注意比较区别
    • 我们需要像下面的操作来进行增加ARGV元素(不先增加ARGC的值没用)
awk 'BEGIN{ARGC+=1;ARGV[1]="a.txt"} {print}'

  • 这个确实理解上可能有点绕哈,如果要参考务必实践一下,测试文件构建也很简单,代码也已经附上。