繁体   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