繁体   English   中英

在bash中声明awk函数

[英]Declaring an awk function in bash

我有一个awk脚本,它被调用:

awk -f myawkfile.awk arguments

使用相同的提到的调用将awk脚本调用到我的bash脚本中。

我可以而不是调用awk脚本将其声明为我的bash脚本中的函数。 我认为通过在前面和后面写一个awk来勾选整个代码然后分配一个函数名来随意调用它会很容易。 不知怎的,它没有做到这一点。

我试图这样做是因为我不希望我的脚本依赖于另一个脚本。 我不是那个写awk脚本的人。 它需要一个文件作为输入,做一些东西并返回我脚本中使用的修改过的文件。

使用heredoc表示法可以写出这样的东西

#!/bin/bash

awk_program=$(cat << 'EOF'
    /* your awk script goes here */
EOF
)

# ...

# run awk script
awk "$awk_program" arguments

# ...

只需在函数中编写awk脚本:

#!/bin/sh -e

foo() { awk '{print $2}' "$@"; }
foo a b                         # Print the 2nd column from files a and b
printf 'a b c\nd e f\n' | foo   # print 'b\ne\n'

请注意,如果将空字符串作为参数传递,则awk标准在行为上似乎不明确,但shell保证"$@"扩展为零字段而不是空字符串,因此如果您使用以下方法调用foo ,则只会出现问题空论点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM