2012-01-26 4 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? Я был бы удивлен, результаты будут одинаковыми на моем Linux-хосте и на моем встроенном устройстве, используя зов busybox! Любой указатель высоко ценится!

EDIT Моя ошибка, выход был в stderr ... ._.

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

Извините за излишнее!

+3

только предположения, но это возможно, что '1' ./spawn печатает на стандартную ошибку вместо стандартного вывода? Делает './spawn 1 2> & 1 | cut -d '|' -f2' работа, например? –

ответ

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

Он работает здесь.

7

Просто повторив то, что я догадался в комментарии в качестве ответа, теперь, когда вопросник подтвердил, что это проблема.

Проблема заключается в том, что ./spawn 1 выводит на стандартную ошибку, а не на стандартный выход. Вы можете перенаправить вывод с помощью 2>&1, так должен работать:

./spawn 1 2>&1 | cut -d '|' -f2 
Смежные вопросы