以下を試していますが、成功できません。
次の内容を含むファイルがあります。
events_0-new
events_1-new
events_2-new
events_3-new
events_4-new
events_5-new
events_6-new
system-events_0-new
system-events_1-new
system-events_2-new
system-events_3-new
system-events_4-new
system-events_5-new
system-events_6-new
ylog_0-new
ylog_1-new
次のスクリプトがあります
for i in `cat new.txt`
do
case $i in
system-events_*)
for file in `cat new.txt | grep system-events_*`
do
echo "$file" >> polo.txt
done
;;
events_*)
for file in `cat new.txt | grep events_*`
do
echo "$file" >> polo.txt
done
;;
ylog_*)
for file in `cat new.txt | grep ylog_*`
do
echo "$file" >> polo.txt
done
;;
esac
done
ただし、ここではケースを使用しているため、値が複数回印刷されます。
電流出力
events_0-new
events_1-new
events_2-new
events_3-new
events_4-new
events_5-new
events_6-new
events_0-new
events_1-new
events_2-new
events_3-new
events_4-new
events_5-new
events_6-new
system-events_0-new
system-events_1-new
system-events_2-new
system-events_3-new
system-events_4-new
system-events_5-new
system-events_6-new
system-events_0-new
system-events_1-new
system-events_2-new
system-events_3-new
system-events_4-new
system-events_5-new
system-events_6-new
ylog_0-new
ylog_1-new
ylog_0-new
ylog_1-new
必要な出力は、ケースがevents_ *と一致する場合はすべてのイベント出力を一度だけ印刷し、events_0-newに対して同じケースを実行しないでください。events_1-newとevents_2-newに対して同じケースを実行する必要があります。最後まで。
これが私が望むものです。ケースがevents_ *と一致する場合は、7回ではなく次のように印刷する必要があります。 events_0-new events_1-new events_2-new events_3-new events_4-new events_5-new events_6-new
実際には、その文字列にのみ属するデータを挿入するために、カールコマンドの環境変数として使用したいと思います。
例:
curl -X PUT 'http://localhost:9200/$file' -H 'Content-Type: application/json' -d events.json
curl -X PUT 'http://localhost:9200/$file' -H 'Content-Type: application/json' -d ylog.json
curl -X PUT 'http://localhost:9200/$file' -H 'Content-Type: application/json' -d system-events.json
ここで、 $file は new.txt から events_0 ...events_6 にインポートする必要があり、これは他の文字列と同じです。
たぶんこれを行うのに何か欠けているか、最も簡単な方法がわからないかもしれません。
大文字と小文字が一致する場合は、一度だけ印刷する方法を教えてもらえますか?これはケースとして一度実行する必要があり、同じケースを持つ他の文字列に対してこれを繰り返すべきではありません。
ご案内ください。
ありがとう、サム
答え1
_
読み込んだ文字列の最初の部分の前の部分だけを取得し、new.txt
呼び出しで使用したいようですcurl
。
#!/bin/bash
headers=( -H 'Content-Type: application/json' )
baseurl='http://localhost:9200'
while IFS= read -r entry; do
data=${entry%%_*}.json # strip off all at first "_" and add ".json"
curl -X PUT "${headers[@]}" -d "$data" "$baseurl/$entry"
done <new.txt
ファイルを処理する前に、ファイル内の3つの特定の種類の行をフィルタリングする必要がある場合:
#!/bin/bash
headers=( -H 'Content-Type: application/json' )
baseurl='http://localhost:9200'
grep -e '^events__' -e '^system-events_' -e '^ylog_' new.txt |
while IFS= read -r entry; do
data=${entry%%_*}.json # strip off all at first "_" and add ".json"
curl -X PUT "${headers[@]}" -d "$data" "$baseurl/$entry"
done