2016-04-28 56 views
0

我有一個腳本,它循環執行curl命令,該命令從API中提取數據。匹配Bash中For循環中的數字列表

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號的變量的 「」

NUMBERS=$(cat << EOF 
441111111111 
441111111112 
441111111113 
... etc 
) 

的API調用的輸出是範圍:

652364_441111111112 

正如你可能會注意到我已經把輸出剪成兩部分並放入一個變量中。

我需要的是匹配輸出中的6位代碼,其中輸出中的數字與變量中的數字匹配。

我嘗試過使用if聲明,但我無法解決這個問題。

任何幫助,將不勝感激。

謝謝。

回答

1

我會使用join而不是bash中的循環。就像這樣:

curl -s -X POST -d "$PARAMS" "$URL" | sort \ 
    | join -t _ -2 2 -o 2.1 <(sort numbers.txt) - 

這樣做是採取排序的輸出curl,並加入它的numbers.txt的排序後的內容(你可以使用$NUMBERS太),使用_作爲分隔符,使用文件22其中是-意思是stdin(來自curl)。然後輸出字段2.1,這是六位數的ID。

0

閱讀why-is-using-a-shell-loop-to-process-text-considered-bad-practice然後做這樣的事情:

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"是什麼意思?它是如何涉及到包含441111111111441111111113的$ NUMBERS,以及它們與match the 6 digit code有什麼關係),並且期望的輸出缺失。