全長DR

全長DR

カールコマンドパラメータを含むテキストファイルがあります。ファイルの外観は次のとおりです。

'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を解析します。

欲しいのは、

  1. 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行目の最後の部分を検索します。

おすすめ記事