[英]Match List of Numbers in For Loop in Bash
我有一個循環執行curl
命令的腳本,該命令從API提取數據。
LIST_OF_ID=$(curl -s -X POST -d "username=$USER&password=$PASS&action=action" http://link.to/api.php)
for PHONE_NUMBER in $(echo $LIST_OF_ID | tr '_' ' ' | awk '{print $2}');
do
$VOIP_ID = $(echo $LIST_OF_ID | tr '_' ' ' | awk '{print $1}')
done
我也有16個數字的變量,范圍為“ 447856321455 ”
NUMBERS=$(cat << EOF
441111111111
441111111112
441111111113
... etc
)
API調用的輸出為:
652364_441111111112
您可能會注意到,我已經將輸出分成兩部分,並放入一個變量中。
我需要匹配輸出中的6位數字,其中輸出中的數字與變量中的數字匹配。
我已經嘗試過使用if
語句,但是我無法正確地做到這一點。
任何幫助,將不勝感激。
謝謝。
我會使用join
而不是bash中的循環來做到這一點。 像這樣:
curl -s -X POST -d "$PARAMS" "$URL" | sort \
| join -t _ -2 2 -o 2.1 <(sort numbers.txt) -
這樣做是采取排序的輸出curl
並與排序內容加入它numbers.txt
(你可以使用$NUMBERS
也行),使用_
作為分隔符,使用柱2
文件2
這是-
這意味着標准輸入(從卷曲)。 然后輸出字段2.1
,即六位ID。
閱讀為什么使用一個shell循環來處理文本考慮的不良做法 ,然后執行以下操作:
curl ... |
awk -v numbers="$NUMBERS" -F'_' '
BEGIN { split(numbers,tmp,/[[:space:]]+/); for (i in tmp) nums[tmp[i]] }
$2 in nums
'
但老實說,由於樣本輸入中的數字似乎彼此不匹配,我真的無法說出您正在嘗試做什么in the range of "447856321455"
是什么,以及它與$ NUMBERS的關系如何)包含441111111111
至441111111113
,以及其中的任何一個與match the 6 digit code
如何),並且缺少預期的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.