3

以下是我的 bash 脚本。如果我使用变量 oid 在 awk 中进行比较,它不会显示匹配行。

oid="3586302804992"
SYMBOL_CSV_FILE="symbol/BAC"
awk -F, '$5 == $oid' "$SYMBOL_CSV_FILE"
echo "2nd"
awk -F, '$5 == "3586302804992"' "$SYMBOL_CSV_FILE"

O/P 是

2nd
BAC,1,O,1,3586302804992

symbol/BAK文件内容是

BAC,1,O,1,3586302804992o

将 "" 放在 $oid 周围,在第 3 行,没有任何区别。

4

2 回答 2

6

代替:

awk -F, '$5 == $oid' "$SYMBOL_CSV_FILE"

像这样使用它:

awk -F "," -v oid="$oid" '$5 == oid' "$SYMBOL_CSV_FILE"
于 2013-08-13T11:51:10.213 回答
1

要让 bash 解释您的变量,您必须使用双引号。单引号将按原样发送$oid到您的程序。

然后, as$5也将被解释,而你不想!你必须逃避$.

最后,你有:

awk -F, "\$5 == $oid" "$SYMBOL_CSV_FILE"
        ^^          ^
于 2013-08-13T11:50:47.273 回答