杂项功能(Miscellaneous Functions)
AWK具有以下杂项功能 -
close(expr)
此功能关闭管道文件..
例子 (Example)
[jerry]$ awk 'BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}'
执行此代码时,您将获得以下结果 -
输出 (Output)
HELLO, WORLD !!!
脚本看起来神秘吗? 让我们揭开它的神秘面纱。
第一个语句cmd = "tr [az] [AZ]" - 是我们从AWK建立双向通信的命令。
下一个语句,即print命令,为tr命令提供输入。 这里&| 表示双向通信。
第三个语句,即close(cmd, "to") ,在竞争执行后关闭to进程。
下一个语句cmd |& getline out借助getline函数将输出存储到out变量中。
下一个print语句打印输出,最后close函数关闭命令。
delete
此函数从数组中删除元素。 以下示例显示了close函数的用法 -
例子 (Example)
[jerry]$ awk 'BEGIN {
arr[0] = "One"
arr[1] = "Two"
arr[2] = "Three"
arr[3] = "Four"
print "Array elements before delete operation:"
for (i in arr) {
print arr[i]
}
delete arr[0]
delete arr[1]
print "Array elements after delete operation:"
for (i in arr) {
print arr[i]
}
}'
执行此代码时,您将获得以下结果 -
输出 (Output)
Array elements before delete operation:
One
Two
Three
Four
Array elements after delete operation:
Three
Four
出口
此函数停止执行脚本。 它还接受一个可选的expr ,它成为AWK的返回值。 以下示例描述了exit函数的用法。
例子 (Example)
[jerry]$ awk 'BEGIN {
print "Hello, World !!!"
exit 10
print "AWK never executes this statement."
}'
执行此代码时,您将获得以下结果 -
输出 (Output)
Hello, World !!!
fflush
此函数刷新与打开的输出文件或管道关联的任何缓冲区。 以下语法演示了该函数。
语法 (Syntax)
fflush([output-expr])
如果未提供output-expr,则刷新标准输出。 如果output-expr是空字符串(“”),则它会刷新所有打开的文件和管道。
getline
此函数指示AWK读取下一行。 以下示例使用getline函数读取并显示marks.txt文件。
例子 (Example)
[jerry]$ awk '{getline; print $0}' marks.txt
执行此代码时,您将获得以下结果 -
输出 (Output)
2) Rahul Maths 90
4) Kedar English 85
5) Hari History 89
该脚本工作正常。 但第一线在哪里? 让我们看看。
在开始时,AWK从文件marks.txt读取第一行并将其存储到$0变量中。
最后,AWK的print语句打印出第二行。 此过程一直持续到文件结束。
next
next函数会更改程序的流程。 它导致模式空间的当前处理停止。 程序读取下一行,然后使用新行再次开始执行命令。 例如,以下程序在模式匹配成功时不执行任何处理。
例子 (Example)
[jerry]$ awk '{if ($0 ~/Shyam/) next; print $0}' marks.txt
执行此代码时,您将获得以下结果 -
输出 (Output)
1) Amit Physics 80
2) Rahul Maths 90
4) Kedar English 85
5) Hari History 89
nextfile
nextfile函数改变程序的流程。 它停止处理当前输入文件,并从下一个文件的第一个记录开始,通过模式/过程语句开始一个新的循环。 例如,以下示例在模式匹配成功时停止处理第一个文件。
首先创建两个文件。 我们说file1.txt包含 -
file1:str1
file1:str2
file1:str3
file1:str4
并且file2.txt包含 -
file2:str1
file2:str2
file2:str3
file2:str4
现在让我们使用nextfile函数。
例子 (Example)
[jerry]$ awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt
输出 (Output)
执行此代码时,您将获得以下结果 -
file1:str1
file2:str1
file2:str2
file2:str3
file2:str4
返回
可以在用户定义的函数中使用此函数来返回值。 请注意,如果未提供expr,则函数的返回值是未定义的。 以下示例描述了return函数的用法。
首先,创建一个包含AWK命令的functions.awk文件,如下所示 -
例子 (Example)
function addition(num1, num2) {
result = num1 + num2
return result
}
BEGIN {
res = addition(10, 20)
print "10 + 20 = " res
}
执行此代码时,您将获得以下结果 -
输出 (Output)
10 + 20 = 30
系统
此函数执行指定的命令并返回其退出状态。 返回状态0表示命令执行成功。 非零值表示命令执行失败。 例如,以下示例显示当前日期,并显示命令的返回状态。
例子 (Example)
[jerry]$ awk 'BEGIN { ret = system("date"); print "Return value = " ret }'
执行此代码时,您将获得以下结果 -
输出 (Output)
Sun Dec 21 23:16:07 IST 2014
Return value = 0