私は次のようなカンマ区切りファイルを解析し、変数に各フィールドを抽出しようとしている:whileループでbashスクリプトでカンマ区切りのファイルを解析する
bob,mechanic,single,swimming,/bob/tmp,batman,
joe,architect,married,tennis,/joe/tmp,superman,34
このスクリプトでは:
#!/bin/bash
#|| [[ -n "$input" ]]
while IFS=, read -r a b c d e f g; do
echo "$a"
done < "commafile.txt"
しかし、私は、コマンドラインから./parsecommasで(parsecommasと呼ばれる)のスクリプトを実行すると、スクリプトは何も出力せずにすぐに終了します。
私は間違っていますか?私はOSX Yosemiteを実行していて、xcodeを使ってスクリプトを編集してから、それを実行する端末を使用しています。私は欠陥のある目に見えないものをチェックしたが、誰も見つけていない。 commafile.txtは、bashスクリプトparsecommasと同じディレクトリにあります。
EDIT:C++プログラムを実行してファイルの最後の行しか読み込めなかったので、この問題は自分のコードではなく、私がテキストファイルを作成するために使用した方法である可能性があることに気付きました。私は自分のファイルを作成するために
touch commafile.txt
を使用し、私はgetlineのC++プログラムで(ファイル、行)を使用した場合、ファイルの最後の行を読み取ることだけができました。他の誰かが前にこの問題にぶつかっていますか? Mac/Text Editorで何が間違っているのですか?私はXCodeのか、テキストエディタのいずれかでファイルを開くときの線の全てが表示されている間
cat commafile.txt
のみ、ファイルの最後の行を出力します。私はボックスの形をしたフィールドのdocという単語の内容をcommafile.txtにコピー・ペーストしました。
:
代わりを
-d $'\r'
read
に渡すことで、あなたの代わりに、標準のUNIXのテキストファイルのこのフォーマットを期待して、あなたのループを変更することができ、次のようにあなたはこの問題を解決することができますIFSが動作しない文字があるのだろうか?コロン、セミコロン、カラット、星、ハッシュ記号などのように?言及すべきもう1つの事は、私がターミナルにタッチでファイルparsecommasを作成したという事実です。 – RFrank
いいえ、IFSの影響を受けない文字はありません。 –
ファイルの作成方法よりも重要なのは、ファイルがどのように*ファイルに埋め込まれているかです。たとえば、末尾に改行がない場合は、少なくともファイルの最後の行を読むことができないため、バグが発生します。 –