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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

2回答

13255閲覧

【mac/ターミナル】catコマンドで複数のCSVを統合する際、先頭列にファイル名を追加したい

1995nihong

総合スコア24

CSV

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

1クリップ

投稿2019/04/09 04:13

複数のCSVファイルを一つのCSVに統合するのにターミナルでCATコマンドを利用しています。

①CSVファイルを一つのフォルダにまとめる
②ターミナルを起動し、cd で該当するフォルダに移動
cat *csv > tougou.csv とコマンドを打つ ⇨フォルダ内に統合フォルダができる

という流れでやっていますが、このままでは、上から順に行がプラスされていくだけなので、どのファイルから持ってきたデータなのかがわからなくなってしまいます。

できれば、
各行の先頭列にファイル名を追記したい と思っているのですが、
ターミナルのコマンド操作で行う方法はあるのでしょうか?

【現状】
20190301.csv
20190302.csv
2019030.csv

品名価格数量
りんご1502
みかん2005
すいか4501
品名価格数量
もも3002
みかん2005
すいか4501
品名価格数量
もも3002
りんご1505

【やりたいこと】

ファイル名品名価格数量
20190301りんご1502
20190301みかん2005
20190301すいか4501
ファイル名品名価格数量
20190302もも3002
20190302みかん2005
20190302すいか4501
ファイル名品名価格数量
20190303もも3002
20190303りんご1505

ご教示いただけますと幸いです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

シェルを作成してみました。
*.csvの行頭にファイル名(拡張子なし)を追加して、tougou.csvに出力しています。

for csvname in `ls *csv` do filename=`echo $csvname | sed 's/.[^.]*$//'` sed "s/^/${filename},/g" ${csvname} >> tougou.csv done

無理やり1行にすると以下のようになります。

for csvname in `ls *csv`; do filename=`echo $csvname | sed 's/.[^.]*$//'`; sed "s/^/${filename},/g" ${csvname} >> tougou.csv; done

投稿2019/04/09 05:16

編集2019/04/09 05:17
y.nakamura

総合スコア190

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1995nihong

2019/04/09 06:00

ありがとうございます!! こちら実行してtougou.csvを生成すると、複数のcsvのうち、一番最後のcsvのデータのみがファイル名を先頭列に含んだ形で出力されてしまいました。 cat *.csv > tougou.csv とやったときのように全てのcsvファイルを一つのファイルにまとめたいのですが、どのように編集すれば良いでしょうか?
guest

0

ベストアンサー

これでどうでしょう。

awk 'FNR==1{$0="ファイル名," FS $0} FNR>1{$0=FILENAME "," $0} {print}' *.csv

投稿2019/04/09 05:01

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1995nihong

2019/04/09 06:20

ありがとうございました!こちらでやりたいことができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問