カールコマンドパラメータを含むテキストファイルがあります。ファイルの外観は次のとおりです。
'https://example.com/tl/' -X POST -H 'Content-Type: application/json' --data-raw '{"email":"username2",}'
'https://example.com/tl/' -X POST -H 'Content-Type: application/json' --data-raw '{"email":"username3",}'
'https://example.com/tl/' -X POST -H 'Content-Type: application/json' --data-raw '{"email":"username4",}'
'https://example.com/tl/' -X POST -H 'Content-Type: application/json' --data-raw '{"email":"username5",}'
'https://example.com/tl/' -X POST -H 'Content-Type: application/json' --data-raw '{"email":"username6",}'
これが私が使用するコマンドです
cat /AbsolutePath/Inputfile.txt | xargs -P 10000 -n 10 curl -s | jq '.message'
私はそれを使用していますジャック、コマンドラインからjsonを解析します。
欲しいのは、
message
特定のテキストがある場合は、電子メールを受信できるように、上記のコマンドの出力を別のコマンドにパイプまたは送信します。値そのカールコマンドに使用し、ログファイルに書き込むか、usernameX.txtを使用してファイル名を作成します。
たとえば、cURLコマンドのメッセージ= '成功'の場合にのみ、ユーザー名2とユーザー名5をログファイルに書き込むか、ユーザー名2.txtとユーザー名5.txtという2つのファイルを作成する必要があります。
ベストアンサー1
要件を満たすには、各出力「メッセージ」を対応する入力「メール」に関連付ける必要があります。
最も簡単な方法は、特定のメールとそのカール結果を出力できる独自のシェルスクリプトにカールを置き換えることです。シンプルで安全でないバージョンは次のとおりです。
#! /bin/bash
# print <mail> <message>
jq .mail -rj "${@: -1]}" # print mail without newline
echo -n " "
curl -s "$@" | jq .message -r
その後、結果は次にパイプされます。awk '$2=="success"{print $1}'
それ以外にもこれを試すことができます
cat /AbsolutePath/Inputfile.txt |
xargs -P 10000 -n 10 curl -s |
jq -s 'to_entries|.[]|select(.value.message=="success")|.key+1' |
awk 'FILENAME=="-"{line[$0]=1} FILENAME != "-" && line[FNR]==1{print gensub(/.*--data-raw /, "", "g", $0)}' - /AbsolutePath/Inputfile.txt |
jq .mail -r
デフォルトでは、jqは成功メッセージのインデックスを取得し、awkはインデックスを読み取り、ファイル内の対応するn行目の最後の部分を検索します。