在编写awk脚本时,如何安排输入文件名和其他参数?

在编写awk脚本时,如何安排输入文件名和其他参数?,awk,Awk,我想写一个awk脚本,这样 我可以直接在bash中运行脚本名,而无需将awk作为命令名 如何安排输入文件名和其他参数在命令行中指定并传递到脚本中 脚本应该以shebang开头,比如说myscript.awk: #! /usr/bin/awk -f

我想写一个awk脚本,这样 我可以直接在bash中运行脚本名,而无需将
awk
作为命令名

如何安排输入文件名和其他参数在命令行中指定并传递到脚本中

脚本应该以shebang开头,比如说
myscript.awk

#! /usr/bin/awk -f                                                                                                                                                                 

还是没有谢邦

如何编写脚本来处理命令行参数,以便像
myscript.awk inputfile arg1 arg2
myscript.awk arg1 arg2 inputfile
那样运行它

我应该如何处理
awk
的选项,例如
-F'\t'

或者有哪些替代方法

或者我应该通过编写一个bash脚本,在我的awk程序上调用
awk
,间接地完成它吗


谢谢

我更喜欢使用bash来完成大部分工作,然后使用所有参数调用awk。这样,您就可以完全访问bash内置和其他内容

您可以这样做:

#!/bin/bash

var1=$1
var2=$2
separator=$3

awk -F "$separator" -v myvar1="$var1" -v myvar2="$var2" '
    BEGIN {
        print myvar1, myvar2
    }
'

如果您的参数包含空格(如许多文件名),双引号是很好的选择。

如果您计划直接调用工具而不是通过
awk-f myscript.awk
,请不要给工具命名
myscript.awk
。您的意思是命名工具
myscript
,不带扩展名
.awk
?是的。工具的命名应该基于它们的功能,而不是它们所用的语言。如果您有一个用shell(或awk、python、perl、ruby或…)编写的名为“foo”的工具,并且您决定用C重写它,那么生成的工具仍然应该命名为“foo”。从用户POV来看,应该没有明显的差异。所以不要在工具名称中添加“.awk”或“.sh”或任何其他扩展名。@EdMorton谢谢。您的建议是否取决于脚本是否包含shebang?如果我编写的脚本没有shebang,因此脚本必须作为其解释器的参数,那么我是否应该使用扩展名(如.sh、.awk)来命名脚本,以指示其解释器?如果您正在编写shell脚本,请为其指定一个shebang,并且不包括后缀。如果您正在编写一个awk(或其他工具)脚本作为
awk-f script.awk
等传递给awk,那么一定要给它一个后缀。同样,从命令行调用的工具的名称应该独立于该工具所用的语言。对。总之,用shebang启动shell脚本来调用awk是没有用的,因为它剥夺了您单独使用shell和awk的能力,而这两种脚本都是它们最擅长的。只需在前3个赋值之后添加一个
shift 3
,然后在最后一个
“$@”
之后添加一个
shift 3
,这样awk就会将每个非赋值参数视为一个文件名:
var1=$1;var2=2美元;九月=三元;第三班。。。awk'script''$@
。显然,您可以添加对的调用,以使shell部分中的参数解析更加健壮。
#!/bin/bash

var1=$1
var2=$2
separator=$3

awk -F "$separator" -v myvar1="$var1" -v myvar2="$var2" '
    BEGIN {
        print myvar1, myvar2
    }
'