Grep 3 大文字と数字を 2 つの変数に変換

Grep 3 大文字と数字を 2 つの変数に変換

IBMスクリプトを介してループを使用してfor loopディレクトリサイズを取得するスクリプトを作成しました。その後、スクリプトはディレクトリサイズとパスをSlackチャンネルに出力し、簡単に表示できます。プログラムは機能しますが、IBMスクリプトの出力が大きいため、Slackで読みやすいようにフォーマットする必要があります。したがって、Slackメッセージを生成するために使用される2つの別々の変数にリンクする2つの情報を収集する必要があります。私のスクリプトは次のとおりです

SIZE () {
  for dir in /path/to/dir/*
  do
    cd /usr/lpp/mmfs/samples/ilm/
    SLACKMESSAGE=$(./mmpolicy-du.sample "$dir" -t /mmfs1/.policytmp -g /mmfs1/.policytmp/ -N all -v -h)
    SLACK
  done
}

/path/to/dir/*親ディレクトリにも同様に適用されます。 IBMスクリプトは、./mmpolicy-du.sample "$dir" -t /mmfs1/.policytmp -g /mmfs1/.policytmp/ -N all -v -h すべてのサブディレクトリー(1レベルの深さ)を繰り返してサイズを取得します。出力は次のとおりです。

[I] 2018-05-31@16:32:55.798 Policy execution. 0 files dispatched.
[I] 2018-05-31@16:32:55.804 Policy execution. 0 files dispatched.
File system scan complete.
534.5M     total
mmapplypolicy du for /path/to/directory/SPI/ complete at Thu May 31 17:32:55 2018

534.5Mこれは最もきれいな出力ではないので、上記の例のディレクトリサイズをという変数と呼ばれるSIZESPIの変数にパイプしたいと思いますPROJECT。もちろん、ループとして、SIZE変数PROJECTは上記の例の各ディレクトリで変更されます/path/to/dir/。上記の関数から呼び出されたSlack関数は、これら2つの変数を使用します。これら2つの変数を変数に入れる方法を理解しようとしています。誰にも解決策はありますか?ありがとうございます!

ベストアンサー1

一度に完了:

eval "$(yourscript | awk -v q=\' '
  $1 ~ /^[[:digit:]]+(\.[[:digit:]]+)?[MGT]$/ {
    print "SIZE=" $1
  }
  match($0, /[[:upper:]]{3}/) {
    print "PROJECT="q substr($0, RSTART, RLENGTH) q
  }')"

一部のawk実装(nawkSolaris以前mawkまたは以前のバージョン)は、/正規表現間隔演算子をgawkサポートしていません(以前(古代ではない)バージョンの場合は、それをサポートする環境で実行できます)。 25年以上。これを行うには、に変更する必要があります。{x,y}{x}gawkPOSIXLY_CORRECT=anything[[:upper:]]{3}[[:upper:]][[:upper:]][[:upper:]]

おすすめ記事