2012-01-26 34 views
4

この質問は既に尋ねられていますが、私が見つけた解決策はありませんでした。パイプ文字区切り文字でフィールドを区切る方法

COUNT|293|1|lps 

私は2番目のフィールドを持つに興味があるしかしこれらの試みの誰が働いた:

./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 エラーが発生しました。出力が標準エラーになりました。

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

申し訳ありません。

+3

を、それが '1' ./spawnは、標準エラーの代わりに、標準出力に印刷されている可能性があり、次は動作するはずですので、あなたは、2>&1を使用して出力をリダイレクトすることができますか? './spawn 1 2>&1 |を実行します。カット-d '|'例えば、-f2'の仕事? –

答えて

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

ここで動作します。

7

私は答えとしてコメントで推測したことを繰り返すだけで、質問者がこれが問題であることが確認されました。

ここでの問題は、./spawn 1が標準出力ではなく標準出力に出力されていることです。ただの推測

./spawn 1 2>&1 | cut -d '|' -f2 
関連する問題