我想向 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 不会扩展单引号变量。
OFS
和arg
(两者都是变量)在命令行上awk
设置。-v
您不使用-v
set并且在实际代码前面以错误的方式OFS
使用。这会给你一个错误(你没有提到)。事实上,GNU 的意思是“打开优化并将输入字段分隔符设置为字符串”。-v
awk
-OFS,
awk
S,
请注意,如果$arg
(shell 变量)包含需要保留的反斜杠,那么最好通过环境传递该值,因为否则这些值将被解释为awk
:
arg="$arg" awk -F , -v OFS=, '{ $2 = ENVIRON["arg"]; print }' >"$outfile"
输出文件大概应该是$outfile
,而不是outfile
.
有关的: