簡體   English   中英

Bash中For循環中的數字匹配列表

[英]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的關系如何)包含441111111111441111111113 ,以及其中的任何一個與match the 6 digit code如何),並且缺少預期的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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