bash
スクリプトを使用して、テーブルを含むHTMLを.csvファイルに変換しようとしています。sedまたはawkを使用して日付形式を修正する
これまでのところ、私はacomplishedてきた次のステップ:
- はと(
- は、すべての空白行を削除する(
sed 's/[ \t]//g'
で)すべてのスペースとタブを削除 - (
dos2unix
付き)Unixのフォーマットに変換しますsed ':a;N;$!ba;s/\n//g'
)(HTMLファイルにテーブルの各セルに空白行があるので、これは必要です。これは自分のものではありません) - 不要な
<td>
と<tr>
タグを削除します。sed 's/<t.>//g'
) - のend-of-line(
\n
)文字(sed 's/<\/tr/\n/g'
付き)もちろん
で</tr>
を交換し
sed 's/<\/td/,/g'
で( '' で</td>
を交換し、私はすべてこの中に入れていますパイプライン。これまでのところ、それは素晴らしい仕事です。最終的なステップは次のとおりです。テーブルには日付が付いたカラムがあります。フォーマットはdd/mm/yyyy
です。yyyy-mm-dd
に変換したいと思います。 (簡単な)方法(sed
またはawk
)がありますか?
(全体sed
配管後の)データサンプルは:
500,2,13/09/2007,30000.00,12,B-1
501,2,15/09/2007,14000.00,8,B-2
期待される結果:
500,2,2007-09-13,30000.00,12,B-1
501,2,2007-09-15,14000.00,8,B-2
私はこのデータをインポートする必要があるので、私はこれを行うために必要な理由がありますMySQLへ。私はExcelでファイルを開き、フォーマットを手で変更することができましたが、私はそれをスキップしたいと思います。
この場合、 'read'が_subshell_で動作するので、' read'ベースのコマンドは動作しません。 'echo '08/26/2013 'を使用してください。 {IFS = /読み取りm d y;エコー "$ {y} - $ {m} - $ {d}"; } 'または ' IFS =/read m d y <<< '08/26/2013';エコー "$ {y} - $ {m} - $ {d}" ' – mklement0
@ mklement0ああ、そうですね。しかし、 'ksh'でもうまくいくでしょう。別の代替手段は、( 'echo'がサブシェルにあるかもしれませんが)サブシェルを避けるために 'IFS =/read m d y <(echo 08/26/2013)'でしょう。 – twalberg
良い点ですが、ここではおそらく '<<<'が最も効率的です。 Bash v4.2 +では、 'shopt -s lastpipe'を使うこともできます(ただし、スクリプト内のみ)。解決策の1つで回答を更新することをお勧めしますか? – mklement0