私は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]++}]