出力

出力

Bashスクリプトの途中に次のような文字列配列があると想像してみましょう。

example1.log    
example1.log.1
log2.log
xpto.log
xpto.log.1
xpto.log.2

次の形式の文字列を含む連想配列(必要な配列構造の表現)に変換する方法はありますか?

{
    "example1" : [ "example1.log", "example1.log.1" ],
    "log2" : [ "log2.log" ],
    "xpto" : [ "xpto.log", "xpto.log.1", "xpto.log.2" ]
}

メモ:

  • 初期文字列は常にnon-predictable-name++.logと似た形式を持ちます.x(オプションの点と整数)。

ありがとうございます。

ベストアンサー1

解決策は次のとおりですbash(バージョン> = 4)。

declare -A logs
for logfile in *; do
    logs[${logfile%%.*}]+="$logfile "
done

連想配列を使用する例として、次のように印刷できます。

for log in "${!logs[@]}"; do
    echo "$log:"
    for file in ${logs[$log]}; do
        echo "- $file"
    done
done

(ログファイル名にスペースがないとします)

おすすめ記事