看来 awk 脚本考虑了ARGV[1]
to ARGV[ARGC]
作为输入文件。
有没有办法让 awk 考虑到ARGV
作为简单的参数而不是输入文件
Example:
test.awk
#!/usr/bin/awk -f
BEGIN {title=ARGV[2]}
{if ($1=="AA") {print title}}
dat file
AB
BA
AA
CC
$ test.awk dat 'My Interesting Title'
我有趣的标题
awk: test.awk:3: fatal: 无法打开文件“我的有趣标题”进行阅读(没有这样的文件或目录)
您可以修改ARGV
随时。 awk 处理以下元素ARGV
反过来,如果您在处理过程中修改它们,您可以安排读取不同的文件或不将某些参数视为文件名。特别是,如果您修改ARGV
in the 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)