我想在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
复制相似问题