2016-04-28 7 views
0

私はcurlコマンドでループするスクリプトを用意しています。このスクリプトはAPIからデータを取り込みます。Forループ内のBashでの数字の一致リスト

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 

私はまた、API呼び出しの出力は ""

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

の範囲内の16個の数字の変数を持っている:

652364_441111111112 

あなたが気づくことのよう私は出力を2つの部分に分け、それを変数に入れました。

私が必要とするのは、アウトプットからの6桁のコードと、アウトプットの番号が一致することです。

私はifステートメントを使って試行しましたが、正しい方法で頭を動かすことはできません。

ご協力いただければ幸いです。

ありがとうございます。

答えて

1

私は、bashのループではなくjoinを使用します。このように:

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

これがないと、ファイル2の列2を使用して、セパレータとして_を使用して、(あなたも$NUMBERSを使用することができます)numbers.txtのソート内容でcurlからソートされた出力を取ると、それに参加しています-はstdin(カールから)を意味します。次に、6桁のIDである出力フィールド2.1を出力します。その後、

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に関連していますか)、期待される出力はありません。

関連する問題