我正在尝试以下事情但无法成功
我有包含以下内容的文件
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
但它多次打印值,因为我在这里使用了 case
电流输出
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
所需的输出应该是,如果 case 与 events_* 匹配,则它应该只打印一次所有事件输出,它不应该为 events_0-new 运行相同的 case,然后为 events_1-new 运行相同的 case,对于 events_2-new 依此类推,直到最后。
这就是我想要的,如果大小写与 events_* 匹配,那么它应该像下面一样打印而不是七次 events_0-new events_1-new events_2-new events_3-new events_4-new events_5-new events_6-new
实际上我想在curl命令中使用它们作为环境变量来插入仅属于该字符串的数据
例子:
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