首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >awk参数$1,$2与bash输入参数冲突

awk参数$1,$2与bash输入参数冲突
EN

Unix & Linux用户
提问于 2019-10-09 17:46:51
回答 1查看 2.5K关注 0票数 2

我想在bash脚本中添加一些awk命令。bash脚本接受几个输入,输入由$1, $2 and etc传递。当我调用awk时,我还想使用$1来定义表中的一个位置,我怎么做呢?

example.sh

代码语言:javascript
运行
复制
#! /user/bin/bash
arg=$1
outfile=$2
awk -F, -OFS, -v '{$2="$arg"; print}' > outfile

在这个脚本中,$2被解析为$outfile。我怎么才能避免这种情况?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-10-09 18:34:28

awk命令中有一些错误。

下面将导入$arg作为awk变量arg

代码语言:javascript
运行
复制
awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"

$2不可能被解释为这里的第二个位置参数或代码中的第二个位置参数,因为它发生在单引号中,并且shell不会展开单引号变量。

OFSarg (都是awk变量)是在命令行中使用-v设置的。您没有使用-v设置OFS,而是在实际的awk代码前面以错误的方式使用-v。这会给您带来一个错误(您没有提到)。实际上,带有GNU awkD15意味着“打开优化并将输入字段分隔符设置为字符串S,”。

请注意,如果$arg ( shell变量)包含需要保留的反斜杠,则最好通过环境传递该值,因为否则这些值将由awk解释:

代码语言:javascript
运行
复制
arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"

输出文件应该是$outfile,而不是outfile

相关信息:

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/545973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档