2

出力を変数に変換したい、最初の行から毎回最後の結果を取得したい。

There are 1 server(s) in cluster: SQL_GDM
MS_SQL_sql1.local.com---RUNNING
There are 2 server(s) in cluster: MONGO_GDM
MS_MONGO1_mongo1.local.com---RUNNING
MS_MONGO2_mongo2.local.com---RUNNING

期待されるビュー:

SQL_GDM|sql1.local.com|RUNNING
MONGO_GDM|mongo1.local.com|RUNNING
MONGO_GDM|mongo2.local.com|RUNNING

今のところ、サーバーの状態のみを次のように取得します。

grep -oP '(?<=---)\w+'

MS_*_ を削除してホストのみを維持し、その後サーバーの状態を grep する方法を考えています。

4

5 に答える 5

5

を使用した一方向。正規表現を使用してフィールドを分割し、1 つ以上のハイフン ( -+) またはコロンの後にオプションのスペース文字 ( :[[:space:]]*) を使用します。そうすれば、クラスターと状態のどちらかを簡単に見つけることができます。サーバーの場合、最後のパスを分割し_て抽出します。

の内容script.awk:

BEGIN {
        FS = "-+|:[[:space:]]*"
}

$0 ~ /:/ {
        cluster = $NF
        next
}

{
        n = split( $1, server, /_/ )
        printf "%s|%s|%s\n", cluster, server[ n ], $NF
}

次のように実行します。

awk -f script.awk infile

そして、次の結果が得られます。

SQL_GDM|sql1.local.com|RUNNING
MONGO_GDM|mongo1.local.com|RUNNING
MONGO_GDM|mongo2.local.com|RUNNING
于 2013-06-10T09:40:27.610 に答える
4

sed を介して出力をパイプすることにより、MS_*_ を削除できます。

echo "MS_MONGO1_mongo1.local.com---RUNNING" |  sed "s/^MS_.*_//" 

またはawkスクリプトを作成しますconvert.awk

/cluster:/{ cluster = $NF; }
/^MS_/{ 
  gsub("---","|"); 
  gsub("^MS_.*_",""); 
  printf("%s|%s\n",  cluster,$0); 
}

出力をパイプします

awk -f convert.awk
于 2013-06-10T09:33:08.957 に答える
2

おもちゃの例:

use strict;
use warnings;

my $inputFile = shift(@ARGV);
open (my $input, $inputFile);

my $cluster = undef;

  while(<$input>)
  {
    chomp;

    if ($_ =~ /^There are \d+ server\(s\) in cluster: (\w+)$/)
    { 
        $cluster = $1; #keeps track of current cluster
    }

    else 
    {
        $_ =~ s/.*_.*_//; #removes the underscores and non-sense associated with them

        if ($_ =~ /---([A-Z]+)/)
        {
            my $temp = $1; #extracts RUNNING or NOT_RUNNING, or what have you

            $_ =~ s/---$temp//; #removes hypens/STATE from $_

            print "$cluster|$_|$temp\n";
        }
    }
  }

コメントはコードにあります。1 行に 1 つのエントリがあると仮定しました。入力をファイルに入れて として開くと$input、希望どおりの正確な出力が生成されます。さらに説明が必要な場合は、コメントを残してください。

于 2013-06-10T09:56:51.520 に答える