bash:最新のnレコードのフィルタリング

bash:最新のnレコードのフィルタリング

Logstashデータですべてのストレージを埋めるのを防ぐために、Elasticsearchクラスタのインデックスを削除する小さなスクリプトを作成しています。

レコードのリストがあり、最新のnレコード(たとえば7つ)を保持し、他のすべてのレコードを削除したいと思います。

カールを使用してインデックスのリストを取得できます。

drakaris:~/ # curl -sL localhost:9200/_cat/indices/logstash-* | awk '{print $3;}' | sort
logstash-2022.12.30
logstash-2022.12.31
logstash-2023.01.01
logstash-2023.01.02
logstash-2023.01.03
logstash-2023.01.04
logstash-2023.01.05
logstash-2023.01.06
logstash-2023.01.07
logstash-2023.01.08
logstash-2023.01.09

私のスクリプトでは、最新の7番目のインデックスだけを保持し、 "curl -XDELETE localhost:9200 / index"を使用したいと思います。

Bashの配列からこれらのレコードをどのように取得できますか?

ありがとう


[編集] 誰かが役に立つと思う場合に備えてこの方法で解決しました。

RETENTION=7
nbk=$(curl -sL localhost:9200/_cat/indices/logstash-* | awk '{print $3;}' | wc -l)
if [ $nbk -gt $RETENTION ]; then
    echo -e "======== Delete obsolete indexes (retention: $RETENTION)"
    let ntodel=$nbk-$RETENTION
    for efile in $(curl -sL localhost:9200/_cat/indices/logstash-* | awk '{print $3;}' | sort -r | /usr/bin/tail -$ntodel); do
        curl -XDELETE localhost:9200/$efile
        sleep 10
    done
fi

ベストアンサー1

これは簡単なはずです。これを試してみてください(テストされていません!)

drakaris:~/ # curl -sL localhost:9200/_cat/indices/logstash-* | awk '{print $3;}' | sort | tail -n +8
logstash-2022.12.30
logstash-2022.12.31
logstash-2023.01.01
logstash-2023.01.02

必要なものを取得するために、headまたはここを使用して各エンドポイントに対してエンドポイントを呼び出すなどのものをパイプできます。tailxargs curl...DELETE

とのマンページを確認し、headコマンドtailの使い方をメモしてください。+

おすすめ記事