これは私が頭を壊そうとしているものです...それでもうまくいきません
これが機能します:
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/ などを使用したかったのはそのためです] .