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