- 締切済み
原因不明の半角スペースの追加現象
今年から仕事でシェルスクリプトでコーディングすることになり初めて触る言語なので日々勉強しているのですが、どうしても解決方法の見つからないものが出てきてしまったので質問させて頂きます。 ファイルから行を読み込んでsql文に追加入力しようとしているのですが、抽出した単語にシングルクォーテーションを付ける際、半角スペースが一文字分シングルクォーテーション内部に出来てしまいます。 以下例です。 aaa.txt←読み込むファイル aaa,bbb,ccc,ddd←ファイル内容の簡略版 ・ ・ ・ #!/bin/sh while read LINE;do CUT1=`echo ${LINE} | cut -d , -f1`←※1 echo \'${CUT1}\'>>bbb.txt←※2 CUT2=・・・ ・ ・ 同じことを繰り返す ・ done<aaa.txt 結果 bbb.txt 'aaa ''bbb ''ccc '・・・ ※1:この部分は少々曖昧ですが、LINEに読み込んだ行の1番目のフィールド(今回の例ではaaa)を抽出してCUT1に入れようとしています。 まだまだ未熟者の為ソースがおかしいかもしれませんが、今回はそのことに関しては気にしないでください。 プログラム自体はきちんと走っています。 問題になっている点は※2の部分で、シングルクォーテーションを付けると勝手に半角スペースが追加されてしまいます。 CUT1には「aaa」と半角スペースのない状態で入っています。 sedを使ってスペースをなくそうかとも考えたのですが、何分データ量がすごい数なので少しでも走らせるプログラムを減らしたいのです。 sed以外で半角スペースをなくす方法はありますでしょうか? また、これはどんな理由で半角スペースが入ってしまうのか原因もわかりますでしょうか? 簡単な質問ですが、ご教授の方よろしくお願いいたします。 一応sedでの半角スペースを削除する方法もご教授頂けたら幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
そうそう, ちと Cygwin でやってみたけど, 見た感じスペースは入らないようですよ. 変数 CUT1 にスペースが入っていなければ, \'${CUT1}\' でもスペースは入らないはずです. 使っている OS がなんなのかわからないので何とも言えませんが. なお, カテゴリーに合わせて Perl で書くと while ($line = <>) { chomp $line; print map { "'$_'\n" } split /,/, $line; } くらい?
- Tacosan
- ベストアンサー率23% (3656/15482)
えっと, やりたいことが今一つ見えないんだけど, 「もともとコンマで区切っているファイル, コンマを改行に変えつつ前後にシングルクォートを入れる」 ということでいいのかなぁ? だとしたら, たとえば sed -e "s/^/'/; s/\$/'/; s/,/'\n'/g" aaa.txt でできたりして.