如何使用tcl将多个csv文件合并为一个csv文件

时间:2018-07-02 00:49:15

标签: csv tcl

我尝试使用TCL将所有类似的csv文件合并在一起

exec /bin/cat checked_*.csv > check_all.csv

但结果显示:

/ bin / cat:checked _ *。csv:没有此类文件或目录

执行时

“ exec / bin / cat check _ *。csv> check_all.csv”     (文件“ test.tcl”第80行)

4 个答案:

答案 0 :(得分:1)

exec命令不会像shell那样扩展文件名,因此cat仅接收字符串checked_*.csv。我的猜测是

exec /bin/cat {*}[glob checked_*.csv] > check_all.csv

会更好(尽管我在Windows上)。由于扩展,需要Tcl 8.5或更高版本。

我会推荐

package require fileutil

::fileutil::writeFile check_all.csv [::fileutil::cat {*}[glob -nocomplain checked_*.csv]]

顺便

答案 1 :(得分:1)

嗯,也许是纯Tcl解决方案?

Sub FilterTest1()
    dim c as variant
    with workSheets("Criteria")
        c = .cells(.rows.count, "A").end(xlup).value
        .Range("A:B").AutoFilter  field:=1, Criteria1:=c
    End With
End Sub

编辑:多亏了格伦·杰克曼,set files [glob checked_*.csv] set fout [open "check_all.csv" w] foreach file $files { set fin [open $file r] fcopy $fin $fout close $fin } close $fout 换成了puts $fout [read $fin]

答案 2 :(得分:0)

您需要具有*.csv完整路径的exec,例如

exec /bin/cat /home/s/pathtofile/checked_*.csv > check_all.csv

答案 3 :(得分:0)

快速而又肮脏的解决方案:启动一个外壳程序来为您处理漫游和重定向:

exec /bin/sh -c {/bin/cat checked_*.csv > check_all.csv}