[英]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的关系如何)包含441111111111
至441111111113
,以及其中的任何一个与match the 6 digit code
如何),并且缺少预期的输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.