1

これは私が頭を壊そうとしているものです...それでもうまくいきません

これが機能します:

awk '{
    if ( $2 ~ /FULL/ )
     print "TRUE" $0
   }' FILE1

しかし、「/FULL/」部分を動的にしたいので、シェル変数にリンクすることでこれを変更できます。

これが私が欲しいものです:

shellfull="/FULL/"

awk -v awkfull=$shellfull '{
    if ( $2 ~ awkfull )
    print "TRUE" $0
                            }' FILE1

FILE1 の内容は次のとおりです。

84738273 RTF-Ref-FULL-Monday 
38473847 The-Wed-DLL-DIFF-Fri-FULL 
84839489 FULL 
83945940 Schedule_FULL 
84928049 Schedule_DIFF 

「IF」ステートメント内で awkfull を使用できないように見えます。これは、awkfull を出力でき、実際にシェル変数の内容が表示されるためです。私が意味したのは:

print awkfull       //this works)
if ( $1 ~ awkfull)  //this does NOT work... why?

更新 1

すべての回答に対して、本当に良いアイデアを提供してくれた人もいました。しかし、私は自分の正確な状況を説明する必要があると感じています. 文字列のランダムな場所にある単語を見つけるには「/」が本当に必要であり、文字列がどのように見えるかは事前にわかりません。

だからここに私がそれを使いたいものがあります:

//Set Variable Content:
FULL="/FULL/||/Full/||/full/||/SQL-Backup_Fri-Last-Of-Month/"
DIFF="/DIFF/||/Diff/||/diff/||/San-Element/"

$FULL または $ に単語があるかどうかに基づいて、FULL、または DIFF、またはその両方としてカウントされるかどうかを判断するために使用する単語が文字列の 1 つに含まれている大きなログファイルがあります。その文字列のランダムな場所に一致する DIFF

したがって、ファイル内の文字列が次のようになっている場合:

84738273 RTF-Ref-full-Monday 
38473847 The-Wed-DLL-DIFF-Fri-FULL 
84839489 FULL 
83945940 Schedule_Full_backup 
84928049 Schedule_DIFF
83940392 2_SQL-Backup_Fri-Last-Of-Month-23049
84828348 Schedule_new-build

私はそれがなりたい:

FULL 84738273 RTF-Ref-full-Monday 
DIFFFULL 38473847 The-Wed-DLL-DIFF-Fri-FULL 
FULL 84839489 FULL 
FULL 83945940 Schedule_Full 
DIFF 84928049 Schedule_DIFF
FULL 83940392 2_SQL-Backup_Fri-Last-Of-Month-23049
UNKNOWN 84828348 Schedule_new-build

ここで、動的な方法でセットアップを検索する単語を含むリストを用意することが重要です。そのため、変数 $DIFF または $FULL を変更すると、ファイル内のさまざまな単語が検索されます。

だから私がこれをどのように達成したかったかは、sript の概念によるものでした:

//set filter patterns
FULL="/FULL/||/Full/||/full/||/SQL-Backup_Fri-Last-Of-Month/"
DIFF="/DIFF/||/Diff/||/diff/||/San-Element/" 

awk -v full=$FULL -v diff=$DIFF '{          //link the shell variable to awk variable, since a direct shell variable in awk didn't work.
if ( $2 ~ diff )                            //find all strings with words defined in $DIFF
print "DIFF" $0                             //print "DIFF" in front of the line
if ( $2 ~ full )                            //find all strings with words defined in $FULL
print "FULL" $0                             //print "FULL" in front of the line
if ( $2 !~ full||diff)                      //if a line does neighter contain words of $DIFF or $FULL.
print "UNKNOWN" $0                          //print "UNKNOWN" in front of the line
                        }' FILE1            //load the file that needs to be filterd

このスクリプトは、まだ定義されていないスケジュールとポリシーを見つけた場合、私とそれ自体に明確にする必要があります。これにより、scipt は新しい不明なスケジュールまたはポリシーがいつ作成されたかを認識し、フィルターを調整する必要があることを警告できます。また、スクリプトは、計算されたキロバイトが「不明なスケジュールとポリシー プール」にどれだけ割り当てられるかを計算できます。

これが物事をもう少し明確にすることを願っています。文字列内のランダムな場所で複数のランダム化単語[FULL,full,SQL-DB,ect.]を検索する必要があります[/$full/||/$diff/ などを使用したかったのはそのためです] .

4

4 に答える 4

1

あなたは簡単にそれを行うことができます:

shellfull="/FULL/"

awk '{
     if ( $1 ~ '$shellfull' )
     print "TRUE" $0
}' FILE1

これは$shellfull変数をクォートしているように見えますが、実際にはシェルが参照できるように「クォートを解除」しています。

于 2013-10-09T15:10:48.383 に答える
0

以下のコマンドの実行中にエラーが発生しました:

Spacedata_1ファイル mountpointは何らかの値を持つ外部変数です

grep "$mountpoint" Spacedata_1 |awk -v mountpoint=$mountpoint 'if ($5==mountpoint ) { print $4 }'
于 2017-06-29T12:23:37.877 に答える