リモートSSHからawkに渡されたawkの特定の列値の印刷は機能しません。 "\$1" を試しました。

リモートSSHからawkに渡されたawkの特定の列値の印刷は機能しません。
$ /usr/bin/ssh user@server "sudo sysdumpdev -e |awk '{print \$7}' |awk '{size=\$1/1024/1024; printf("%d\n", size);}'" 
 Syntax Error The source line is 1.
 The error context is
                {size=$1/1024/1024; >>>  printf(% <<< dn, size);}
 awk: 0602-502 The statement cannot be correctly parsed. The source line is 1.

ベストアンサー1

二重引用符の中に二重引用符をエスケープする必要があります。

/usr/bin/ssh user@server "sudo sysdumpdev -e |awk '{print \$7}' |awk '{size=\$1/1024/1024; printf(\"%d\n\", size);}'" 

これら2つのawkコマンドを1つにまとめることができます。

/usr/bin/ssh user@server "sudo sysdumpdev -e |awk '{printf(\"%d\n\", \$7/1024/1024);}'" 

awk別の方法は、ローカルコンピュータでコマンドを実行することです。

/usr/bin/ssh user@server sudo sysdumpdev -e |awk '{print $7}' |awk '{size=$1/1024/1024; printf("%d\n", size);}' 
/usr/bin/ssh user@server sudo sysdumpdev -e |awk '{printf("%d\n", $7/1024/1024);}' 

編集する:引用するデイブ・トンプソン_085のコメント

私はローカル形式を好みますが、リモート形式を単純化することで、次のようにすることができます。

ssh u@s "sudo sysdumpdev -e | awk '{print int($ 7/1024/1024)}' "

-$ 7ローカルシェルではパラメータとして扱われませんが、(リモート)awkではフィールドとして扱われます。

おすすめ記事