繁体   English   中英

在Bash脚本中使用awk

[英]using awk in Bash script

我正在学习Bash脚本。 我的data.txt包含:

A Orange
B Apple

我努力了

echo "enter"
read fruit
awk -F'[: ]' '$2 == "Apple"' data.txt
a=`awk -F'[: ]' '\$2 == "$fruit"' data.txt` # returns null
echo "$a"

将变量“ a”与我的awk命令一起使用时,为什么我的awk命令不起作用?

问题的症结在于,您试图使用单引号字符串,就好像它是 引号字符串一样。

使用时您打算做什么:

'\$2 == "$fruit"' # DOES NOT WORK - nothing is escaped or expanded

是:

"\$2 == \"$fruit\""  # keep literal $2, expand $fruit

单引号的外壳程序字符串中的所有内容均按字面意义使用 ,因此不会扩展变量引用,并且也无需转义任何内容-也不可以将其转义( \\也将成为字符串的文字部分)。

也就是说,最好将shell的世界和Awk脚本分开,以防止混淆,这意味着:

  • 使用单引号字符串作为Awk脚本。
  • 通过Awk的-v选项将任何shell变量值传递给脚本,以创建Awk变量。

如果我们将所有内容放在一起:

a=$(awk -F'[: ]' -v fruit="$fruit" '$2 == fruit' data.txt)

请注意,我使用了现代的命令替换语法$(...) ,它比传统语法`...`可取

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM