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

mor*_*ndg 6 bash awk sed pipe ash

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

COUNT|293|1|lps
Run Code Online (Sandbox Code Playgroud)

我对第二个字段感兴趣但是这些尝试中没有一个有效:

./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'
Run Code Online (Sandbox Code Playgroud)

但输出总是一样的:

COUNT|293|1|lps
Run Code Online (Sandbox Code Playgroud)

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

编辑 我的错,输出是stderr ... ._.

./spawn 1 2>&1 | cut -d '|' -f2
4615
Run Code Online (Sandbox Code Playgroud)

抱歉让人心烦!

Mar*_*air 8

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

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

./spawn 1 2>&1 | cut -d '|' -f2
Run Code Online (Sandbox Code Playgroud)


小智 2

$ echo 'COUNT|293|1|lps' | cut -d'|' -f2
293
Run Code Online (Sandbox Code Playgroud)

它在这里工作。