Unix コマンドは Tcl スクリプトでは機能しません。

Unix コマンドは Tcl スクリプトでは機能しません。

私はTclとUNIXプログラミングに初めて触れました。

次のコマンドはUNIXコマンドラインでは機能しますが、Tclスクリプトでは機能しません。

$ sort -b -k8  abc.txt | awk '!a[$1]++'
error out for 8 (-k8) and 1($1) is not variable

8列を並べ替えようとしています。最初そしてそれから列1では、一意のデータのみを選択します。

また、データをファイルに保存してみました。

答え1

私の考えでは、文字列からandをエスケープする必要があると思います[]。たとえば、次のようになります。$

send_unix_cmd "sort -k$sort_col top_$host | awk '!a\[\$$uni_col\]++' "

私もそれを削除しました{}

答え2

Tclスクリプトでコマンドを実行するには使用する必要があると思いますexec。一重引用符はスクリプトに特別な意味がないため、Tcl変数を拡張しようとします$1。次のことを試すことができます。

exec sort -b -k8  abc.txt | awk {!a[$1]++} > output

プログラムの標準出力をリダイレクトしないと、コマンドの戻り値になるため、execこれをキャプチャできます。たとえば、次のようになります。

set result [exec sort -b -k8  abc.txt | awk {!a[$1]++}]

関連情報