打印awk最基本的用法输出文本内容了,直接使用print选项

文章目录

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,就不会输出结果。

输出变量

图片[1]-打印awk最基本的用法输出文本内容了,直接使用print选项-唐朝资源网

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:]]+"

图片[2]-打印awk最基本的用法输出文本内容了,直接使用print选项-唐朝资源网

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"

图片[3]-打印awk最基本的用法输出文本内容了,直接使用print选项-唐朝资源网

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

© 版权声明
THE END
喜欢就支持一下吧
点赞261赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容