2012-01-26 206 views
4

我知道这个问题已经被问到,但没有找到我找到的解决方案!我有了这样一个输出的程序:如何用管道字符分隔符分隔字段

COUNT|293|1|lps 

我感兴趣的具有第二场然而,这些尝试没有一个工作:

./spawn 1 | cut -d '|' -f2 
./spawn 1 | cut -d \| -f2 
./spawn 1 | awk -F "|" '{print $2}' 
./spawn 1 | awk 'BEGIN{FS="|"} {print $2}' 
./spawn 1 | sed 's/|/;/g' 
./spawn 1 | sed 's/\|/;/g' 

但产量始终是相同的:

COUNT|293|1|lps 

在bash的某个地方有bug吗?我会惊讶的发现,我的Linux主机和我的嵌入式设备上使用busybox的灰烬的结果是一样的!任何指针,非常感谢!

编辑 我的错,输出在stderr ... ._。

./spawn 1 2>&1 | cut -d '|' -f2 
4615 

对不起ennoying!

+3

只是一个猜测,但有可能的是'./spawn 1'被打印到标准错误而不是标准输出? './spawn 1 2>&1 |切-d'|' -f2'的工作,例如? –

回答

2
$ echo 'COUNT|293|1|lps' | cut -d'|' -f2 
293 

它在这里工作。

7

只是重复了我在评论中猜测的答案,现在提问者已确认这是问题。

这里的问题是,./spawn 1输出到标准错误,而不是标准输出。您可以重定向使用2>&1输出,所以下面应该工作:

./spawn 1 2>&1 | cut -d '|' -f2