
初めまして。お世話になります。
現在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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- HTML・CSS HTMLタグのあるCSVファイルを利用する方法 4 2023/03/19 14:41
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数学、プログラミング、物理、...
-
Python... 環境設定 初心者です...
-
vba クリップボードクリアにつ...
-
pip --versionがエラーになる
-
画像生成AIのプロンプトの作り...
-
Google ColaboでGUI作成
-
pythonの実行に関する質問
-
Pythonのエラーメッセージをコ...
-
OS入ってる機器のソフト・アプ...
-
パイソンのソースコードをChatG...
-
Python 3.12.2 か一番最新のパ...
-
CSVファイルの複数行削除
-
PowerAutomateで運賃検索がした...
-
ネットワークフォルダの中身を...
-
VBSでテキストファイルの2行目...
-
⚠️至急です!⚠️ Yahoo!知恵袋の...
-
オブジェクト指向プログラミン...
-
IT業で開発をされてる方々に質...
-
Pythonを使ってせん断応力図、...
-
プログラムについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vba クリップボードクリアにつ...
-
CSVファイルの複数行削除
-
OS入ってる機器のソフト・アプ...
-
Python 3.12.2 か一番最新のパ...
-
pythonの実行に関する質問
-
パイソンのソースコードをChatG...
-
画像生成AIのプロンプトの作り...
-
数学、プログラミング、物理、...
-
pip --versionがエラーになる
-
Google ColaboでGUI作成
-
Python... 環境設定 初心者です...
-
HTMLソースが表示のページのも...
-
ネットワークフォルダの中身を...
-
MOVEコマンドでサブフォルダー...
-
google Colabでmatplotlibの描...
-
VBAでパワーシェルを実行したい...
-
Pythonでの文字列からfloatへの...
-
Webサイト内に埋め込んだmp4動...
-
初心者powershellのPS1ファイル...
-
pythonについて(初心者です)
おすすめ情報