自分で作った
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
出力時のレコードの区切り(デフォルトは改行)
atmarkit.itmedia.co.jp
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 '"'
ダブルクォーテーションを削除