我有一个循环遍历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
正如您可能已经注意到我已将输出切换为2个部分并将其放入变量中。
我需要的是匹配输出中的6位数代码,其中输出中的数字与变量中的数字匹配。
我已尝试使用if
语句,但我无法正确理解这种做法。
任何帮助都将不胜感激。
谢谢。
答案 0 :(得分: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
),使用_
作为分隔符,使用文件2
的列2
,-
表示stdin(来自curl)。然后输出字段2.1
,即六位数ID。
答案 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"
是什么意思,它与$有什么关系?包含441111111111
到441111111113
的NUMBER,以及与match the 6 digit code
有何关联的数字,并且缺少预期的输出。