質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

受付中

不規則なデータファイルをコマンドラインでcsvファイルに整形したいです。どなたか教えていただけないでしょうか?

dlrowolleh
dlrowolleh

総合スコア120

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

4回答

0評価

0クリップ

2779閲覧

投稿2017/08/31 05:24

編集2022/01/12 10:55

手作業で整形していたら時間がかかるようなファイルを
コマンド一行で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

名前,年齢,住所,電話

あ,,住所あ,電話あ
い,年齢い,,※※
う,年齢う,住所う,電話う
ほげほげ,,住所え,電話え
名前お,年齢お,住所お,電話お

です
大変失礼いたしました。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

otn

2017/08/31 05:52 編集

レコードの区切りはどういう基準で行いますか?
dlrowolleh

2017/08/31 06:35 編集

大変失礼いたしました。result.csvを書き間違えていました。 「ほげほげ」「電話い」はsample1.txtにありませんでした。 質問を修正します。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。