Как разделить поля с помощью разделителя символов - PullRequest
6 голосов
/ 26 января 2012

Я знаю, что этот вопрос уже задавался, но ни одно из найденных мной решений не сработало для меня!У меня есть программа, которая имеет такой вывод:

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 ]

8 голосов
/ 26 января 2012

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

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

./spawn 1 2>&1 | cut -d '|' -f2
2 голосов
/ 26 января 2012
$ echo 'COUNT|293|1|lps' | cut -d'|' -f2
293

Здесь работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...