Pythonで作られたようですね。データ解析はないですが、ダウンロードして日付順に連結するまでをシェルスクリプトで雑に書いてみました、、ファイル名が日付順になっていないのは、URLリストを作ってその順にデータ連結することで対応してます。 pic.twitter.com/zkhwlklzvZ
— ぱぴろんちゃん😱 (@papiron) 2022年7月31日
自分で作った
curl -s https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000121431_00335.html \ | xmllint --html --xpath '//a[contains(@href,".csv")]/@href' - \ | xargs -n 1 \ | cut -d= -f2 \ | sed 's;^;https://www.mhlw.go.jp/;;' \ | xargs -n 1 curl -L#O curl -s https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000121431_00327.html \ | xmllint --html --xpath 'string(//a[contains(@href,".csv")]/@href)' - \ | sed 's;^;https://www.mhlw.go.jp/;;' \ | xargs -n 1 curl -L#O cat *.csv | iconv -c -f SHIFT_JIS -t UTF-8 > result
ぱぴろんちゃん さんのコード
# ダウンロードするCSVファイルのURLリスト作成 ( curl -s https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000121431_00335.html | xmllint --html --xpath '//a[contains(@href,".csv")]/@href' - 2> /dev/null | xargs -n 1 | cut -d= -f2 curl -s https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000121431_00327.html | xmllint --html --xpath 'string(//a[contains(@href,".csv")]/@href)' 2> /dev/null - ) > download/filelist ( cd download rm -f *.csv result_head result_body # CSVファイルのダウンロード cat filelist | sed 's;^;https://www.mhlw.go.jp/;;' | xargs wget # 説明文を取り除いて、URLリスト順に連結。ファイル名日付順になってないのに注意。 cat filelist | awk '{print $NF}' FS=/ | xargs awk '22<=FNR{print FILENAME,FNR,$0}' FS=, RS='\r\n' OFS=, ORS='\r\n' | # 列名の改行を削除して、改行とダブルクォーテーションを削除 awk '{for(i=1;i<=NF;i++){gsub("\n","",$i)}print}' FS=, RS='\r\n' OFS=, ORS='\r\n' | tr -d '"' | # 実績日のフォーマットを、固定長のYYYY/MM/DDにする # 実績日が"44566"のようになってる場合もあるのに注意 awk '$10~/[0-9]+\/[0-9]+\/[0-9]+/{split($10,date,"/");$10=sprintf("%04d/%02d/%02d", date[1], date[2], date[3])}{print}' FS=, RS='\r\n' OFS=, ORS='\r\n' > result_body # ヘッダー抜き出し ls *.csv | head -n 1 | xargs awk 'FNR==21{print "ファイル名","ファイル行番号",$0}' FS=, RS='\r\n' OFS=, ORS='\r\n' > result_head ) # ヘッダーとデータボディを連結 cat download/result_head download/result_body | nkf > result.csv
2> /dev/null
でエラーを破棄が標準出力にでないみたい
{print}は{print $0}と同じ
cat filelist | awk '{print $NF}' FS=/ | xargs awk '22<=FNR{print FILENAME,FNR,$0}' FS=, RS='\r\n' OFS=, ORS='\r\n'
FILENAME 現在処理しているファイルの名前
FNR ファイル別行番号
NF 各行の列数
FS フィールドの区切り
RS レコードの区切り
OFS 出力時のフィールドの区切り(デフォルトは空白)
ORS 出力時のレコードの区切り(デフォルトは改行)
awk '{for(i=1;i<=NF;i++){gsub("\n","",$i)}print}' FS=, RS='\r\n' OFS=, ORS='\r\n' | tr -d '"'
gsub 全ての置換対象文字列を置換
sub 最初の置換対象文字列一回のみ置換
tr -d '"' ダブルクォーテーションを削除