我有一个错误报告,其中包含大量的电话号码,我需要看看是否有任何这些数据存在于我们的数据库。
所需资料─
电话号码-路由代码-客户ID
我使用的API可以从各种来源收集数据。
第一个请求是使用我们已经知道的电话号码来获取相同的电话号码,这样我就可以在终端中打印它。这很愚蠢,也浪费资源,但我不知道如何只打印查询数据库时有有效响应的电话号码。
curl -s -X GET "http://number.com/api/v1/telephone-number/$rec1" -H "accept: application/json" -H 'X-API-Key: APIKEY'
原始响应
{
"status": "success",
"data": {
"telephone_number": {
"telephone_number": 11111111111,
"account_reference": "CS039890",
"unavailable_until": null,
"links": {
"self": "\/api\/v1\/telephone-number\/11111111111",
"range_holder": "\/api\/v1\/communications-provider\/5237",
"current_provider": "\/api\/v1\/communications-provider\/5237",
"value_tier": "\/api\/v1\/value-tier\/ed4b60b9"
}
}
}
我添加了一个过滤器,只显示电话号码。
| grep telephone_number | sed 's/^[^0-9]*//' | tr -d ','
过滤响应-
11111111111
接下来,我要得到号码的路由码-
curl -s -X GET "http://number.com/api/v1/portability/route/$rec1" -H "accept: application/json" -H 'X-API-Key: APIKEY'
原始响应-
{
"status": "success",
"data": {
"portability_route": {
"telephone_number": 11111111111,
"nppc": 521393
}
}
我又加了一个过滤器只显示路由代码-
| 格勒普核电站|sed的/^[^0-9]*//'
滤波输出-
521393
最后,我需要找回顾客的身份证-
curl -s -X GET "http://number.com/api/v1/telephone-number/$rec1" -H "accept: application/json" -H 'X-API-Key: APIKEY'
原始响应-
"status": "success",
"data": {
"telephone_number": {
"telephone_number": 11111111111,
"account_reference": "CS039890",
"unavailable_until": null,
"links": {
"self": "\/api\/v1\/telephone-number\/11111111111",
"range_holder": "\/api\/v1\/communications-provider\/5237c92e",
"current_provider": "\/api\/v1\/communications-provider\/5237c92e",
"value_tier": "\/api\/v1\/value-tier\/ed4b60b9"
}
}
}
加上过滤器-
| grep CS | sed 's/^.*CS/CS/' | tr -d '"' | tr -d ','
滤波输出-
CS039890
所以最终的输出是这样的-
11111111111
521393
CS039890
在这一点上,我卡住了如何将这些数据组合成一个由逗号分隔的单行,并将其导出到一个文件。可能有10 k+的数字要处理,所以每个结果将需要写入一个新的行。
11111111111,521393,CS039890
11111111112,521393,CS039891
完整的代码-
#Cleanup
rm Output/temp*.* 2> /dev/null
#Check file exists and removes underscores
if tail -n +2 Input/Errors*.csv | tr -d \_ > Output/temp.csv ; then
echo ""
echo "Input File Found!"
echo " "
else
echo ""
echo "Error - Input file is missing!"
echo ""
exit
fi
#Remove leading 0 from the third column
awk 'BEGIN{FS=OFS=","}{sub(/^0/, "", $3)}1' Output/temp.csv >> Output/temp2.csv
#Add headers to file
sed -i '1iError Code, Calls, A Number, B Number, Customer, Area, Cost, NPPC, CS' Output/temp.csv
#Read Telephone numbers from column 3 in file temp2.csv
while IFS="," read -r rec1
do
#echo "$rec1"
curl -s -X GET "http://number.com/api/v1/telephone-number/$rec1" -H "accept: application/json" -H 'X-API-Key: APIKEY' | grep telephone_number | sed 's/^[^0-9]*//' | tr -d ','
curl -s -X GET "http://number.com/api/v1/portability/route/$rec1" -H "accept: application/json" -H 'X-API-Key: APIKEY' | grep nppc | sed 's/^[^0-9]*//' # >> Output/NPPC.txt
curl -s -X GET "http://number.com/api/v1/telephone-number/$rec1" -H "accept: application/json" -H 'X-API-Key: APIKEY' | grep CS | sed 's/^.*CS/CS/' | tr -d '"' | tr -d ','
done < <(cut -d "," -f3 Output/temp2.csv | tail -n +2)
1条答案
按热度按时间qvtsj1bj1#
使用command substitution:通过将该命令放在
$(...)
中,您可以运行该命令并将其输出捕获到一个变量中,您可以根据需要使用该变量。只执行一次curl调用,并将结果保存在变量中:
然后在
grep
中使用该变量,并将结果存储在另一个变量中:然后
echo
这些你喜欢:也就是说,您还可以研究jq来解析JSON。
sed
和grep
可能非常脆弱。