1

我正在使用一些将 Tcl 用于脚本命令的模拟器(Questa sim)我想在 unix 中回显文件内容,如“cat”命令。

可以在 tcl 的一行命令中完成吗?是否有可能只“cat”文件的前 5 行

4

3 回答 3

4

在一行中

puts [read [open data.dat r]]

或者一步一步..

set handle [open data.dat r]
puts [read $handle]
close $handle
于 2013-10-08T06:54:30.573 回答
2

要打开文件并将其内容回显到标准输出(就像cat),请执行以下操作:

set f [open $filename]
fcopy $f stdout
close $f

要只执行前五行(就像 一样head -5),请使用以下过程:

proc head {filename {lineCount 5}} {
    set f [open $filename]
    for {set i 0} {$i < $lineCount} {incr i} {
        if {[gets $f line] >= 0} {
            puts $line
        }
    }
    close $f
}

它需要更多的工作,因为检测行尾比仅仅发送字节更复杂。

于 2013-10-07T13:42:51.620 回答
0

这是以下代码,一次从给定文件中读取 5 行。

#!/usr/bin/tclsh
set prev_count -1
set fp [open "input-file.txt" "r"]
set num_lines [split [read $fp] \n]
for {set i 4} {$i < [llength $num_lines]} { incr i 5} {
   set line_5 [lrange $num_lines [incr prev_count] $i ]
   set prev_count $i
   puts "$line_5\n\n"
}
于 2013-10-08T10:46:06.037 回答