您可以随时修改ARGV
。awk 会依次处理 的元素ARGV
,因此如果在处理过程中修改它们,可以安排读取不同的文件或不将某些参数视为文件名。特别是,如果您ARGV
在BEGIN
块中进行修改,则一切皆有可能。例如,以下代码片段导致 awk 即使在传递参数时也从标准输入读取,并将参数保存在名为 的数组中args
:
awk '
BEGIN {for (i in ARGV) {args[i] = ARGV[i]; delete ARGV[i]}}
…
' hello world
如果您只想跳过第一个参数,只需删除它:
awk '
BEGIN {title = ARGV[1]; delete ARGV[1]}
$1 == "AA" {print title}
' 'My Interesting Title' input.txt
然而,这是不寻常的,因此可能被认为难以维护。考虑使用 shell 包装器并改为通过环境变量传递标题。
#!/bin/sh
title=$1; shift
awk '
$1 == "AA" {print ENV["title"]}
' "$@"
您还可以将字符串作为 awk 变量传递。请注意,该值会经历反斜杠扩展。
awk -v 'title=My Interesting Title\nThis is a subtitle' '
$1 == "AA" {print title} # prints two lines!
' input.txt