我有一个bash脚本,该脚本发出一个API请求,该请求以CSV格式返回结果。 我只想从第一行中提取“ id”值(在其余各行中总是相同),然后将其传递给wget命令(例如wget http://test.com/ $ id)
当前的bash脚本:
req = curl -k -d '{"returnFormat":"csv","eventid":"2"}' -H "Authorization: xxx" -H "Accept: application/json" -H "Content-type: application/json" -X POST https://test.api/restSearch
输出:
id,category,type,value,comment,date,subject_tag
1357,"activity","domain","dodskj.com","comment",1547034584,"kill-chain"
1357,"activity","ip-dst","8.8.6.6","comment example",1547034600,"maec-mal""
根据此示例,我想将值“ 1357”提取到变量中并将其发送到wget命令或任何其他命令。
答案 0 :(得分:1)
在这种情况下,您可以使用cut
命令...
curl <params> | cut -d, -f1
或awk
:
curl <params> | awk -F, '{print $1}'
对于您的特定示例,如果只希望第二行,则可以使用:
curl <param> | awk -F, 'NR == 2 {print $1}'
如果要基于特定字段选择一行,则:
curl <param> | awk -F, '$4 == "dodskj.com" {print $1}'
(您可以使用~
运算符代替==
来匹配正则表达式)
您也可以在与exit
的第一场比赛后休息:
curl <param> | awk -F, '$4 == "dodskj.com" {print $1; exit}'
然后,您可以将整个批次封装在$()
中,以分配给变量...
VAR=$(curl ... | awk ...)
希望有帮助!
答案 1 :(得分:0)
您可以将csv通过管道传输到awk
。
req=$(<prev_cmd> | awk -F, 'NR==2{print $1}')
-F,
告诉awk
字段以逗号分隔。
NR==2
仅在第二行大括号中运行脚本。
print $1
将打印第一个字段。
$(...)
执行command substitution。
注意:请记住变量分配之间不能有空格。