簡體   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