文章目录
awk 命令超级复杂,堪比编程语言。事实上,它被设计为一种编程语言。打印
awk最基本的用法就是输出文本内容,直接使用print选项就可以了,下面是一个例子:
hope@hope:~$ tee demo.txt
In a big big world, I'm not a big big girl.
In a big big world, I'm not a big big girl.
^C
hope@hope:~$ awk '{print}' demo.txt
In a big big world, I'm not a big big girl.
当然,它不如猫。写得太长了。
awk 脚本
awk 的一般用法是将选项写入文件然后执行,因为 awk 的选项有时会太长。这时候可以使用 -f 选项。以下是我的练习记录:
hope@hope:~$ echo "{print}" > print.awk
hope@hope:~$ awk -f print.awk demo.txt
In a big big world, I'm not a big big girl.
hope@hope:~$ cat print.awk
{print}
hope@hope:~$
基本概念
在这里,我们来谈谈awk命令的基本结构。上面说过,awk有两种形式,一种是直接用引号括起来的命令,另一种是-f后跟awk程序路径。下面说一下awk程序的基本结构。 awk程序由多个语法块组成awk 脚本,每个语法块的格式为pattern {action}。在上面的例子中,我们没有模式,只有动作。常见的模式有 BEGIN、END 等。但需要注意的是awk 脚本,第一个模式必须是BEGIN,我举个例子:
hope@hope:~/awk$ awk 'BEGIN {print "I47m fine."}'
I'm fine.
hope@hope:~/awk$ awk 'FOO {print "I47m fine."}'
hope@hope:~/awk$
可以看出,如果第一个不是BEGIN,就不会输出结果。
输出变量
awk 有许多内置变量。这些变量在开始时被初始化。使用awk –dump-variables ”(注意不能少这对单引号)将这些变量输出到awkvars.out文件中,我来实践一下:
hope@hope:~$ awk --dump-variables ''
hope@hope:~$ cat awkvars.out
ARGC: 1
ARGIND: 0
ARGV: array, 1 elements
BINMODE: 0
CONVFMT: "%.6g"
ENVIRON: array, 25 elements
ERRNO: ""
FIELDWIDTHS: ""
FILENAME: ""
FNR: 0
FPAT: "[^[:space:]]+"
FS: " "
FUNCTAB: array, 41 elements
IGNORECASE: 0
LINT: 0
NF: 0
NR: 0
OFMT: "%.6g"
OFS: " "
ORS: "n"
PREC: 53
PROCINFO: array, 30 elements
RLENGTH: 0
ROUNDMODE: "N"
RS: "n"
RSTART: 0
RT: ""
SUBSEP: "34"
SYMTAB: array, 28 elements
TEXTDOMAIN: "messages"
格式化输出
Java有printf,C等语言有printf,awk也有。我们需要编写一个 awk 脚本:
hope@hope:~/awk$ vi printf.awk
hope@hope:~/awk$ awk -f printf.awk
TEXTDOMAIN = messages
hope@hope:~/awk$ cat printf.awk
BEGIN {
printf "TEXTDOMAIN = %sn", TEXTDOMAIN
}
hope@hope:~/awk$
此脚本打印内置变量 TEXTDOMAIN 的值,其值为消息。
设置变量
让我们首先编写一个简单的 awk 脚本来打印变量 FOO 的值。脚本内容如下:
BEGIN {
printf "FOO = %sn", FOO
}
此时没有输出,因为没有变量FOO,所以需要用-v选项设置变量,如下例:
hope@hope:~/awk$ awk -f printvar.awk
FOO =
hope@hope:~/awk$ awk -v FOO=BAR -f printvar.awk
FOO = BAR
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容