forループを使用して、文字列と一致するように大文字と小文字を切り替えます。

forループを使用して、文字列と一致するように大文字と小文字を切り替えます。

以下を試していますが、成功できません。

次の内容を含むファイルがあります。

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

関連情報