1

Tcl スクリプト内で awk コマンドを使用する必要があります。以下のようなファイルがあります。giri.txtとしましょう。

1  what
2  Why
3  When
4  who

次のように出力されると考えて、次のコードを書きました。

what did
why did
when did
who did

set a did
exec cat giri.txt | awk {{ print $2 " " $a }}

しかし、次のように印刷されます。

what what
why why
when when
who who

なぜこのように印刷されるのか、誰か説明できますか?awk内でTcl変数を使用する方法を提案できる人はいますか?

4

2 に答える 2

1

おそらく awk を呼び出さずにすべての tcl を解決できますが、本当にやりたい場合は次のようにします。

set a did
exec awk "{print \$2, a}" a=$a < giri.txt

コマンドがどのように展開されるか疑問がある場合は、exec を echo に置き換えて、結果を確認してください。

echo awk "{print \$2, a}" a=$a
于 2013-07-24T05:30:19.237 に答える
0

awkなしでそれを行います:

set a "did"
set stream [open "giri.txt"]
while {[gets $stream line] >= 0} {
  puts "$line $a"
}
close $stream

再利用可能な手順を使用すると、さらに優れています。

proc forEachLine {file args} {
  set stream [open $file]
  while {[gets $stream line] >= 0} {
    {*}$args $line
  }
  close $stream
}

set a "did"
forEachLine "giri.txt" apply {{line} {
  global a
  puts "$line $a"
}}
于 2013-07-25T00:58:28.433 に答える