
初めまして。お世話になります。
現在Linux環境を使用しており、PHPのアップロードからcsvファイルをアップする機能を設けています。アップロードしたcsvファイルを元にシェルスクリプトでINSERT文を作成している機能になります。
csvファイル自体はローカルのエクセルから作成しています。
例としては、
A1,B1
A2,B2
となっています。
シェルスクリプトでは、アップされたcsvファイルのA1,B1の情報を読み取り変数をセットしていくという単純なものになっています。
具体的にシェルスクリプト内で行っている内容としては、
while read lineを用いて一行ずつ読み、awkを用いてカンマ区切りを指定してprint $1とprint $2で分けたものを変数にセットしています。
具体的には、
echo INSERT (略) VALUES \(\'$変数A(print $1)\',\'$変数B(print $2)'\)\; >> $TEMP
という具合に変数をセットしています。
そこで現在問題となっているのが、変数B(print $2)にcsvファイルの改行コードが含まれている為、作成されるINSERT文が途中で改行されて出力されてしまっています。
この変数Bに含まれている改行コードを削除したいのですが、何か良い案はないでしょうか。
シェルスクリプト内の処理でなんとか解決策を模索しております。
何卒ご教授いただければ幸いです。
誠に申し訳ありませんが宜しくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
while read lineで一行処理→ファイルに>>で追加
ってやるくらいなら、全部まとめてやればいいんです。awkやsed等にはもとから「最初から最後まで1行ずつ読み込んで処理する」機能がついてます。特にawkはプログラミング言語です。PHPほど高機能では無いですが、簡単な処理ならPHPと同等に(処理によってはPHPより簡潔に)使えます。
while read lineなんて方法は、シェルスクリプトでは最後の手段と思っておいた方がいいです。
Excelで出力→Linuxで処理、ということなので、$2に含まれる「改行コード」というのは CR のことかもしれません。
以上をまとめると
・予想するに、もとはこんな感じ
cat 入力.csv | while read line
do
A=`echo $line | awk -F, '{print $1}'`
B=`echo $line | awk -F, '{sub(/\r/,"",$2);print $2}'`
echo INSERT (略) VALUES \(\'$A\',\'$B'\)\; >> $TEMP
done
→これをまとめて1行に
awk -F, '{ sub(/\r/,"",$2) ; printf("INSERT(略) VALUES ('"'%s','%s'"');\n",$1,$2);}' < 入力.csv> $TEMP
# 'の中に'を入れるために、一旦'を閉じて"を使ってます
sedだけでも十分できる
sed 's/\r//g;s/^\([^,]*\),\([^,]*\)/INSERT(略) VALUES ('"'\\1',\\2'"');/' < 入力.csv > $TEMP
#'については同様。後方参照の\1,\2は"の中なので\\1,\\2と表記
内容によっては $TEMP もいらないかも
awk -F, 'BEGIN{print DBへの接続} { sub(/\r/,"",$2) ; printf("INSERT(略) VALUES ('"'%s','%s'"');\n",$1,$2);} END{print DB終了処理}' < 入力.csv | sqlのコマンド
まあ、アップローダのPHPでDBの処理もしてしまうの一番いいのかも
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像生成AIのプロンプトの作り...
-
vba クリップボードクリアにつ...
-
Python... 環境設定 初心者です...
-
AIの登場でプログラマーたちが...
-
初心者powershellのPS1ファイル...
-
Geminiフォーム 画像生成で 人...
-
pythonの実行に関する質問
-
python3について。
-
iOSゲームアプリが作りたいと思...
-
Python 3.12.2 か一番最新のパ...
-
Google ColaboでGUI作成
-
数学、プログラミング、物理、...
-
pip --versionがエラーになる
-
OS入ってる機器のソフト・アプ...
-
パイソンのソースコードをChatG...
-
CSVファイルの複数行削除
-
pythonについて(初心者です)
-
MOVEコマンドでサブフォルダー...
-
プログラミング言語のバージョ...
-
AIがプログラムする時代のプロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
画像生成AIのプロンプトの作り...
-
Geminiフォーム 画像生成で 人...
-
CSVファイルの複数行削除
-
数学、プログラミング、物理、...
-
pip --versionがエラーになる
-
Python... 環境設定 初心者です...
-
pythonの実行に関する質問
-
Python 3.12.2 か一番最新のパ...
-
OS入ってる機器のソフト・アプ...
-
パイソンのソースコードをChatG...
-
Google ColaboでGUI作成
-
VBAでパワーシェルを実行したい...
-
HTMLソースが表示のページのも...
-
ネットワークフォルダの中身を...
-
Pythonのエラーメッセージをコ...
-
Webサイト内に埋め込んだmp4動...
-
google Colabでmatplotlibの描...
-
初心者powershellのPS1ファイル...
-
Pythonについて。
おすすめ情報