我想在bash脚本中添加一些awk命令。bash脚本接受几个输入,输入由$1, $2 and etc
传递。当我调用awk
时,我还想使用$1
来定义表中的一个位置,我怎么做呢?
example.sh
#! /user/bin/bash
arg=$1
outfile=$2
awk -F, -OFS, -v '{$2="$arg"; print}' > outfile
在这个脚本中,$2
被解析为$outfile
。我怎么才能避免这种情况?
发布于 2019-10-09 18:34:28
awk
命令中有一些错误。
下面将导入$arg
作为awk
变量arg
:
awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"
$2
不可能被解释为这里的第二个位置参数或代码中的第二个位置参数,因为它发生在单引号中,并且shell不会展开单引号变量。
OFS
和arg
(都是awk
变量)是在命令行中使用-v
设置的。您没有使用-v
设置OFS
,而是在实际的awk
代码前面以错误的方式使用-v
。这会给您带来一个错误(您没有提到)。实际上,带有GNU awk
的D15
意味着“打开优化并将输入字段分隔符设置为字符串S,
”。
请注意,如果$arg
( shell变量)包含需要保留的反斜杠,则最好通过环境传递该值,因为否则这些值将由awk
解释:
arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"
输出文件应该是$outfile
,而不是outfile
。
相关信息:
https://unix.stackexchange.com/questions/545973
复制相似问题