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

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

我想向 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.我怎样才能避免这种情况?

答案1

您的命令中有一些错误awk

以下内容将$arg作为awk变量导入arg

awk -F , -v OFS=, -v arg="$arg" '{ $2 = arg; print }' >"$outfile"

$2不可能被解释为此处或代码中的第二个位置参数,因为它出现在单引号中,并且 shell 不会扩展单引号变量。

OFSarg(两者都是变量)在命令行上awk设置。-v您不使用-vset并且在实际代码前面以错误的方式OFS使用。这会给你一个错误(你没有提到)。事实上,GNU 的意思是“打开优化并将输入字段分隔符设置为字符串”。-vawk-OFS,awkS,

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

arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"

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

有关的:

相关内容