手作業で整形していたら時間がかかるようなファイルを
コマンド一行でcsvファイルに変換したいです。
どなたかエレガントなやり方を教えていただけないでしょうか?
sample1.txt
名前 あ 住所 住所あ 電話 電話あ 名前 い 電話 ※※ 年齢 年齢い 年齢 年齢う 名前 う 住所:住所う 電話 電話う 名前 ほげほげ 住所=住所え 電話 電話え 名前=名前お 電話 電話お 年齢 年齢お 住所 住所お
のような
・Tab、半角スペース、全角スペースで始まる
・ヘッダにしたい情報とデータとして扱いたい情報との間に
半角スペース、全角スペース、Tab,=,=,:がある
・不規則にデータが保存されている
ファイルsample1.txtがあります。
このファイルをresult.csvのようなcsv形式のファイルに整形したいのですが,
どなたかエレガントなやり方を教えていただけませんか?
result.csv
名前,年齢,住所,電話番号 あ,,住所あ,電話あ い,年齢い,,電話い う,年齢う,住所う,電話う 名前え,,住所え,電話え 名前お,年齢お,住所お,電話お
私は以下のようにコマンドを実行しました。
$ grep 名前 sample1.txt | cut -f2 -d ' ' | sed -e "s/$/,/" 2>&1 | tee 名前.txt
$ grep 年齢 sample1.txt | cut -f2 -d ' ' | sed -e "s/$/,/" 2>&1 | tee 年齢.txt
$ grep 住所 sample1.txt | cut -f2 -d ' ' | sed -e "s/$/,/" 2>&1 | tee 住所.txt
$ grep 電話 sample1.txt | cut -f2 -d ' ' | sed -e "s/$/,/" 2>&1 | tee 電話.txt
$ paste 名前.txt 年齢.txt 住所.txt 電話.txt >kekka.csv
その結果、以下のようなcsvファイルkekka.csvファイルができました。
名前, 年齢い, 住所あ, 電話あ,
い, 年齢 年齢う, 住所:住所う, ,
う, 年齢お, 住所=住所え, 電話う,
ほげほげ, 住所お, 電話え,
名前=名前お, 電話お,
問題点として
<sample1.txt・処理のやり方が原因?>
・Tab、半角スペース、全角スペースで始まる
・ヘッダにしたい情報とデータとして扱いたい情報との間に
半角スペース、全角スペース、Tab,=,=,:がある
<処理のやり方が原因?>
・csvファイルのヘッダ情報がない
・pasteした時にTabで勝手にインデントされている
・カンマ,の数が合っていない
が考えられます。
sample1.txtからresult.csvを作成するにはどのようにすればいいでしょうか?
こういったファイルをcsv形式にする機会が多く、最終的に手作業に頼ることになり、
時間がかかり毎回気が滅入っております。
アドバイスいただけましたら幸いです。
よろしくお願いします。
修正
result.csv
は
名前,年齢,住所,電話
あ,,住所あ,電話あ
い,年齢い,,※※
う,年齢う,住所う,電話う
ほげほげ,,住所え,電話え
名前お,年齢お,住所お,電話お
です
大変失礼いたしました。
回答4件