다음을 시도하고 있지만 성공할 수 없습니다.
다음 내용이 포함된 파일이 있습니다.
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