簡體   English   中英

如何在bash中比較兩個awk結果值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM