首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Tcl中执行管道shell命令

在Tcl中执行管道shell命令
EN

Stack Overflow用户
提问于 2016-04-18 13:28:42
回答 3查看 5.2K关注 0票数 2

我想在Tcl中执行这些管道shell命令:

代码语言:javascript
复制
grep -v "#" inputfile | grep -v ">" | sort -r -nk7 | head

我试着:

代码语言:javascript
复制
exec grep -v "#" inputfile | grep -v ">" | sort -r -nk7 | head

得到一个错误:

代码语言:javascript
复制
Error: grep: invalid option -- 'k'

当我尝试只传输两个命令时:

代码语言:javascript
复制
exec grep -v "#" inputfile | grep -v ">" 

我得到:

代码语言:javascript
复制
Error: can't specify ">" as last word in command

更新:我还尝试了{}和{bash -c‘.’}:

代码语言:javascript
复制
exec {bash -c 'grep -v "#" inputfile | grep -v ">"'} 

Error: couldn't execute "bash -c 'grep -v "#" inputfile | grep -v ">"'": no such file or directory

我的问题是:如何在tcl脚本中执行初始管道命令?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-19 10:06:49

问题是,当exec自己(或在单词的开头)看到一个表示重定向的>时,它会做一些“特殊的事情”。不幸的是,没有任何实际方法可以直接避免这种情况;这是Tcl的语法系统没有帮助的领域。最后你不得不做这样的事情:

代码语言:javascript
复制
exec grep -v "#" inputfile | sh -c {exec grep -v ">"} | sort -r -nk7 | head

还可以将整个管道移动到Unix shell端:

代码语言:javascript
复制
exec sh -c {grep -v "#" inputfile | grep -v ">" | sort -r -nk7 | head}

尽管坦率地说,这是您可以在纯Tcl中完成的事情,这将使它也可以移植到…上。

票数 4
EN

Stack Overflow用户

发布于 2016-04-18 14:54:37

>在这里造成了问题。

您需要从tcl、( shell )中转义它,以使它在这里工作。

代码语言:javascript
复制
exec grep -v "#" inputfile | grep -v {\\>} | sort -r -nk7 | head

或者(这更好,因为你少了一个grep)

代码语言:javascript
复制
exec grep -Ev {#|>} inputfile | sort -r -nk7 | head    

如果您查看运行此目录的目录(假设为tclsh或类似的目录),您可能会看到以前创建了一个命名奇怪的文件(即|)。

票数 2
EN

Stack Overflow用户

发布于 2016-04-18 16:28:08

纯Tcl:

代码语言:javascript
复制
package require fileutil

set lines {}
::fileutil::foreachLine line inputfile {
    if {![regexp #|> $line]} {
        lappend lines $line
    }
}
set lines [lsort -decreasing -integer -index 6 $lines]
set lines [lrange $lines 0 9]
puts [join $lines \n]\n

(-double可能比-integer更合适)

编辑:i在为lsort编写(0) -index选项时误译了命令sort的(1)-index索引。现在,它已得到纠正。

文档:丝状醇包、如果加入拉皮艾兰治艾索德套餐看跌期权雷杰普设置

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36695424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档