[英]How can I compare two awk result value in bash
這是我的代碼:
#!/bin/bash
filename=$1
declare -a myarr
myarr=($(awk '{print $2}' sim.count))
for((i=0 ;i<${#myarr[@]};i++))
do
#echo ${myarr[$i]}
#rm "${myarr[$i]}"
awk '{if ($1 == "{$myarr[$i]}"){print $2}}' $filename > "${myarr[$i]}"
done
我將awk結果存儲到數組中並運行循環以查找$ filename的第一列是否具有相同的元素,然后打印第二列
我已經嘗試過if ($1 == "a|||a"){print $2}
並且工作良好,但是if ($1 == "{$myarr[$i]}")
不是我想要的結果,則出現任何錯誤??
這實際上是與{$myarr[i]}
進行比較,而不是與與該名稱的shell變量中的條目相關聯的值進行比較:
# original code: DOES NOT WORK (even if fixed to ${myarr[$i]})
awk '{if ($1 == "{$myarr[$i]}"){print $2}}'
這是因為雙引號仍然在單引號內,因此該字符串被傳遞到awk而不用shell對其進行擴展-而且awk無法查看shell變量(環境中的變量除外,該變量需要顯式語法以用於查找,並且不適用於數組)。
而是將您的擴展值分別傳遞到awk
:
awk -v tgt="${myarr[i]}" '{if ($1 == tgt) {print $2}}'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.