シェルスクリプトマガジン

第1回 Amazonの商品ページURLをきれいにする

 8行目では、「if」文を使ってDP変数の値によって処理を切り替えています。if文の基本書式は、次のようになります。

 条件式が「真」(成立した)なら「処理1」が、「偽」(成立しない)なら「処理2」が実行されます。「[」「]」はコマンドですので必ず前後に半角スペースを空けてください。「=」などの比較演算子も同様です。なお、次のコマンドを1行でつなげる「;」を使うと、「if [ 条件式 ]; then」のように記述できます。こちらがよく使われていますので、シェルスクリプトの例でもそのようにしています。

 if文の条件式は、「ロジックを考える」で説明した、二つ目と三つ目のURLの場合が真になるようにしています。真になったとき、二つ目のURLの場合は区切り文字を「/」にして「1」「2」「3」「4」「5」の列を、三つ目のURLの場合は区切り文字を「?」にして「1」の列を切り出し、さらに区切り文字を「/」にして「1」「2」「3」「4」「5」の列を切り出さなくてはいけません。その処理をまとめると、9行目の「echo $i | cut -f 1 -d “?” | cut -f 1,2,3,4,5 -d “/”| sed “s%$%/%g”」になります。

 「echo $i」で整形前のURLを出力して「|」で次のコマンドに渡します。「cut -f 1 -d “?”」は三つ目のURLに必要な、区切り文字を「?」にして1列目を切り出す処理ですが、二つ目のURLに対して実行しても「?」の文字が含まれることはないので影響はありません。よって、この処理を含めています。「cut -f 1,2,3,4,5 -d “/”」で区切り文字を「/」にして、1列目、2列目、3列目、4列目、5列目を切り出します。cutコマンドで複数の列を切り出す場合、「,」で列番号を並べます。なお、間にある区切り文字は含まれますが、最後の区切り文字はなくなってします。よって、「sed “s%$%/%g”」で末尾に「/」を追加しています。「$」は行の末尾を表す特殊な文字列です。

 偽なら、一つ目のURLに対する処理を実行します。一つ目のURLの場合は区切り文字を「/」にして1列目、2列目、3列目、5列目、6列目を切り出します。11行目の「 echo $i | cut -f 1,2,3,5,6 -d “/” | sed “s%$%/%g”」がその処理です。9行目と同じような処理なので説明は省きます。