如何使用管道字符分隔符分隔字段

时间:2012-01-26 13:22:35

标签: bash sed awk pipe ash

我知道这个问题已经被问到了,但是我发现的解决方案没有给我带来帮助!我的程序有这样的输出:

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中某处有错误吗?我会感到惊讶,我的Linux主机和使用busybox灰的嵌入式设备上的结果是一样的!任何指针都非常感谢!

修改 我的错,输出是stderr ...... ._。

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

抱歉让人心烦!

2 个答案:

答案 0 :(得分:8)

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

这里的问题是./spawn 1输出到标准错误,而不是标准输出。您可以使用2>&1重定向输出,因此以下内容应该有效:

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

答案 1 :(得分:2)

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

它适用于此。