
Windows10にCygwinを入れ、スクリプトを書いてます。
HTMLを出力するスクリプトを書いているのですが、最後の最後でエラーでつまずいてしまいました。
どなたかご教授お願いできませんでしょうか。
while read line
do
fpat1=`echo $line | cut -f 1 -d ","`
fpat2=`echo $line | cut -f 2 -d ","`
fpat3=`echo $line | cut -f 3 -d ","`
fpat4=`echo $line | cut -f 4 -d ","`
awk -F "," -v fpat1=${fpat1} -v fpat2=${fpat2} -v fpat3=${fpat3} -v fpat4=${fpat4} '{
if ( $1 == fpat1 ){
printf $1 "," $2 "," $3 "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "," $10 "," $11 "," $12 "," $13 "," $14 "," $15 "," $16 "," $17 "," $18 "," $19 "," "0,0," fpat3 "," fpat4 >> "final.csv"
}
}' product_18366273.csv
done < middle2.csv
fpat3とfpat4には下記のような文字列が入っています。
<h3 class="table_name">型式一覧</h3><table class="info_table">型式<tr><th>有効内容積</th><th>外形寸法</th><th>重量</th></th></tr><tr><td><a href="https://item.rakuten.co.jp/hogehoge/p0737/">SCR- …×D318(+20)×H865mm</td><td>22kg</td><td>単相100V</td></tr><tr><td><a href="https://item.rakuten.co.jp/hogehoge/p0738/">SCR- …×D318(+20)×H865mm</td><td>27kg</td><td>単相100V</td></tr><tr><td><a href="https://item.rakuten.co.jp/hogehoge/p0740/">SCR- …×D473(+20)×H790mm</td><td>29kg</td><td>単相100V</td></tr><tr><td><a href="https://item.rakuten.co.jp/hogehoge/p0739/">SCR- …×D473+(20)×H935mm</td><td>32kg</td><td>単相100V</td></tr></table>
エラー出力は下記となります。
awk: コマンドライン:1: class="table_name">型式一覧</h3><table
awk: コマンドライン:1: ^ 式内に無効な文字 '▒' があります
どなたかお願いします。
No.1ベストアンサー
- 回答日時:
・Unix/Linuxのシェルでは、変数等の展開した後でコマンドを解釈します。
・引用符は、空白等を分けずに一つの引数として認識させるための手段です。
分割や展開が発生しない状況では不要です。
逆に分割したく無い場合は引用符や\が必要です。
・上記2つから考えられることは
-v fpat1=${fpat1}
が 展開されて
-v fpat1=\<h3 class=\"table_name\"\>型式一覧\</h3\>\<table
と解釈される。(h3 とclassの間の空白が引数の区切りだと解釈される)
↓
-v fpat1=\<h3 で変数に代入.
class=\"table_name\"\>型式一覧\</h3\>\<table の部分はオプションの無い引数として解釈される
→awkのスクリプトとして解釈される
→awkの文法に合わないので Syntax Error
ということがおこっているのでしょう。
${fpat1} をひとまとめに扱いたいのなら、"${fpat1} " と引用符でくくることです。
※ fpat3="'"${fpat3}"'" は意味がありません。
先頭と末尾に「引用符文字」が付くだけで、引用符としてに機能は付きません。
実際にどう展開されているかは、 シェルの -x オプションで確認できます。
方法1: set -x コマンドを実行する (解除はset +x)
方法2 :( sh スクリプト で実行している場合は) sh -x スクリプト
方法3 : スクリプト先頭で#!/bin/sh等としている場合は #!/bin/sh -x にする
ご丁寧な分かりやすい回答頂きありがとうございます。
無事、文字列として値を渡す事ができ、スクリプトが完成しました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
VirtualBox 6.1 → 7.1 でUbuntu...
-
Core 2 Duo の古いパソコンに最...
-
ssl_request_logの必要性について
-
ubuntu(linux)のシャットダウン...
-
Ubuntu on Xorgのログインについて
-
Ububtuでファイル共有できない...
-
raspberrypi に bluealsaを入れ...
-
2TBのUSBメモリを2000円ほどで...
-
linuxのIMEの件
-
Lubuntuのデスクトップのアイコ...
-
ubuntuで デイスク/deb/loopと...
-
Fedoraのupgradeで、libruby.so...
-
次の要件を満たすにはどのよう...
-
2TBのUSBメモリを入手したので...
-
「トゥ]の出し方
-
WinSCPでLinux(CentOS6.10)に...
-
インストールできないですどう...
-
Lubuntuでとにかく軽量のバージ...
-
LinuxのノートパソコンでDVDコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
インストールできないですどう...
-
ubuntu(linux)のシャットダウン...
-
Linuxでブートディスクの交換後...
-
bashでシングルクォート内の変...
-
WinSCPでLinux(CentOS6.10)に...
-
ubuntuのシャットダウンが進ま...
-
Linux のシェルスクリプトの強...
-
CentOSが起動時にフリーズ
-
ubuntuで デイスク/deb/loopと...
-
Ubuntu on Xorgのログインについて
-
「トゥ]の出し方
-
Windowsのローカルディレクトリ...
-
apacheでリバースプロキシを設...
-
ubuntu 24 へのCanon 複合機ス...
-
ログにserver reached MaxReque...
-
WineのRufusでデバイスを検知す...
-
ssl_request_logの必要性について
-
「/var/log」内のログの削除の...
おすすめ情報
awk -F "," -v fpat1=${fpat1} -v fpat2=${fpat2} -v fpat3="'"${fpat3}"'" -v fpat4="'"${fpat4}"'" '{
awkに渡す際に変数を"'"で囲ってみました。
エラー内容が変わったのですが、/を文字列として認識していないようです。
awk: コマンドライン:1: class="table_name">型式一覧</h3><table
awk: コマンドライン:1: ^ 式内に無効な文字 '▒' があります
awk: コマンドライン:1: class="table_name">型式一覧</h3><table
awk: コマンドライン:1: ^ syntax error
日本語も文字化けしているのでしょうか。