2017-11-21 11 views
0

awk、bashで1つのファイルにしきい値を出力する必要があります。私は(ここに私しようとしている)状態や印刷thresoldを配置する必要があり別の値に応じて新しい列に特定の値を出力します

file.txtを

device_1 200.33 1000.50 
device_2 12.00 2000.11 
device_3 400.22 6000.32 
device_4 34.11 2000.11 

cat file.txt | awk '{if ($2 < 50); print $1, $2, $3, $4="97%" };elseif { ($2 > 50); print $1,$2,$3, $4="80%";}' 

「$ 2 < 50は、97%を印刷する場合、 else print 80% ":予想出力

device_1 200.33 1000.50 80% 
device_2 12.00 2000.11 97% 
device_3 400.22 6000.32 80% 
device_4 34.11 2000.11 97% 

$ 2の列に正しい条件が設定されていません。 if文の適切な構築に関する

+1

セミコロンでifを直ちに終了します。 'if(条件){do stuff} else if(条件){do stuff} else {do stuff}'でなければなりません。 – 123

+0

と約50?それは考慮されていません! – m47730

+0

は列$ 2より低い値でなければなりません。列$ 2の値が50より小さい場合、その条件に基づいてアラームを設定できます。 – Slashlinux

答えて

3

123 is right

あなたはすぐに終了セミコロンであれば。 if(condition){do stuff}else if (condition){do stuff} else {do stuff}である必要があります。出力

awk '{print $1, $2, $3, ($2 < 50 ? "97%" : "80%")}' file 

device_1 200.33 1000.50 80% 
device_2 12.00 2000.11 97% 
device_3 400.22 6000.32 80% 
device_4 34.11 2000.11 97% 
をあなただけの1つの値またはコンテキストに応じて別のを印刷しようとしていることから、あなたが直接、三項演算子のために行くと言うことができるまだ

print $1, $2, $3, ($2 < 50 ? "97%" : "80%")は、print $ 1、$ 2、および$ 3を表します。別のフィールドは、$ 2 < 50の場合は「97%」、そうでない場合は「80%」のいずれかになります。

+0

ここで説明した内容は分かりません。再び、$ 2または400.22 <値50の場合は、 "space very low"を、それ以外の場合は "space ok"を出力します。 2番目の列の値によると、その値が "私によって設定された1つの値"よりも低い場合、プリントを設定できます。 – Slashlinux

+0

@Slashlinuxあなたの質問には説明されていません。予想される出力を表示するように編集してください。 – fedorqui

+0

awkの機能を悪用( "乱用")し、これを 'awk '$ 4 =($ 2 <50)に単純化できますか? "80%": "97%" 'OFS = \\ t input'。 –

関連する問題