linux参数传入awk,linux – 将参数传递给awk脚本文件

你的哈希bang定义脚本不是shell脚本,它是一个awk脚本。你不能在你的脚本中以bash的方式做到这一点。

还有,你做了什么:echo blah | awk …没有传递参数,它将echo命令的输出管道到另一个命令。

您可以尝试以下方式:

echo "hello"|./foo.awk file -

要么

var="hello"

awk -v a="$var" -f foo.awk file

这样,你的foo.awk中有var a,你可以使用它。

如果你想做一些像shell脚本一样接受$ 1 $ 2 vars,你可以写一个小的shellscript来包装你的awk的东西。

编辑

不,我没有误会你。

举个例子:

假设你的x.awk有:

{print $1}

如果你这样做:

echo "foo" | x.awk file

它是一样的:

echo "foo"| awk '{print $1}' file

这里awk的输入只是文件,你的回声foo没有意义。如果你这样做:

echo "foo"|awk '{print $1}' file -

or

echo "foo"|awk '{print $1}' - file

awk需要两个输入(awk的参数),一个是stdin一个是文件,在你的awk脚本中你可以:

echo "foo"|awk 'NR==FNR{print $1;next}{print $1}' - file

这将从您的回声中打印第一个foo,然后从文件列表1当然这个例子什么也没有实际工作,只需打印它们。

你当然可以有两个以上的输入,不要检查NR和FNR,可以使用

ARGC The number of elements in the ARGV array.

ARGV An array of command line arguments, excluding options and the program argument, numbered from zero to ARGC-1

例如 :

echo "foo"|./x.awk file1 - file2

那么你的“foo”是第二个参数,你可以通过ARGV [2]得到它的x.awk

echo "foo" |x.awk file1 file2 file2 -

现在是ARGV [4]案例。

我的意思是,你的回声“foo”| ..将是标记为awk,它可以通过第1或第n个“参数”/输入awk。取决于你放在哪里 – (stdin)。你必须在你的awk脚本中处理它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值