引言
- 本文主要介绍AWK使用命令行方式调用的一些实例以及详细注释,仅供参考。
AWK使用命令行方式调用实例
- 使用简单实例理解各个参数的作用

-F ERE,如下图设置分隔符号为:
- {}中即为action,表示要执行的操作为
print
- 其中位置变量1,2...为前面输入的第几个字段,"$0"表示整个输入。
- 如果多个输出不使用
,分开就会像字符串一样拼接在一起,空格表示拼接字符串
echo "1:2:3" | awk -F: '{print $1 " and " $2 " and " $3}'


-v assignment通过该选项设置变量,其实assignment本身有两种形式,分别是输入文件和变量赋值,awk可以同时指定多个输入文件,如果输入文件的文件名为'-',表示从标准输入读取内容;变量赋值只有两种形式:字符串和数值,其中变量赋值不能与保留的关键字冲突,且必须位于脚本参数的后面,与文件名参数无先后顺序要求但是顺序不同执行顺序也不同
- 补:awk中两个特别的表达式,BEGIN和END,这两者都可用于pattern中,提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。
echo | awk -v a=1 'BEGIN {print a}'

- 验证变量赋值位置执行顺序(与-v 不一回事)
- 第一种情况: 变量赋值位于所有文件名参数之前
- 第二种情况:变量赋值位于所有文件名之后
- 第三种情况:变量赋值位于文件名之间
- 注:测试的a,b文件都要有内容,不然process字段不会输出,文件有几个process就会输出几次(不太理解为啥。。)
awk 'BEGIN {print "BEGIN:" var} {print "PEOCESS:" var} END {print "END:" var}' var=1 a.txt b.txt
awk 'BEGIN {print "BEGIN:" var} {print "PEOCESS:" var} END {print "END:" var}' a.txt b.txt var=1
awk 'BEGIN {print "BEGIN:" var} {print "PEOCESS:" var} END {print "END:" var}' a.txt var=1 b.txt

- 总之位置不同总结就是下面几条:
- 如果变量赋值在所有文件参数之前,在BEGIN动作之后执行,影响到正常处理和END动作(不写文件参数结果与之相同);
- 如果变量赋值在所有文件参数之后,在END动作之前执行,仅影响END动作;
- 如果变量赋值位于多个文件参数之间,在变量赋值前面的文件被处理后执行,影响到后续文件的处理和END动作;
- 那么变量赋值与
-v assignment赋值又有什么区别呢?其实复制的形式是一致的,但是-v选项优先执行
echo 1 | awk -v var=a 'BEGIN {print "BEGIN: " var}' var=1

结尾
- 感觉写的比较混乱,因为我学习参考的资料也比较跳脱,不是体系的而是一块一块儿的,后续我会找一个综合的例子尝试总结多个知识点。