2016-10-20 9 views
0

シェルスクリプトから "gis" & "cpu"の使用を取得するために、次のコマンドを実行しようとしています。しかし、私は手動でもこのコマンドを実行しようとすると、私は以下のエラーが表示されます。awk:cmd。 1:{print¥9}:構文エラー

これ以上の上級/専門家は助けてください。

$ top -b | head -n 8 | grep -w gis | awk '{ print \$9}' 
awk: cmd. line:1: { print \$9} 
awk: cmd. line:1:  ^backslash not last character on line 
awk: cmd. line:1: { print \$9} 
awk: cmd. line:1:  ^syntax error 

$ top -b | head -n 8 | grep -w gis | awk '{ print \$10}' 

# Same error i am getting for second command as well. 
+1

エラーメッセージがわかりますとおり、バックスラッシュが問題です。 '$'はここでエスケープしてはいけません。すでに一重引用符で囲み、シェルによる拡張から保護されています。 –

+0

そして 'head | grep | grep | grep awkは '' grep'(http://www.iki.fi/era/unix/award.html#grep)と 'head'の[役に立たない使い方]です。特に、 'top -b | awk '/ \ /{print $ 9} NR == 8 {exit 0}' 'しかし' top 'の出力を解析せずに '/ proc'ファイルシステムから必要な情報を釣り上げない方が良いでしょうあなたのOSにそういうものがあるならば。 – tripleee

答えて

1

$をエスケープする必要はありません。一重引用符を使用しているので、シェルは$ 9を補間しません。二重引用符を使用していた場合は、二重引用符をエスケープする必要があります。だから、

、あなたがする必要がある...

top -b | head -n 8 | grep -w gis | awk '{ print $9}' 

または

top -b | head -n 8 | grep -w gis | awk "{ print \$9}" 
+1

良い点ですが、 'awk'スクリプトを表すのに二重引用符で囲まれた文字列を使うことはあまりお勧めできません。 – mklement0

関連する問題