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

파일을 처리하기 전에 파일에서 세 가지 특정 유형의 행을 필터링해야 하는 경우:

#!/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

관련 정보