2017-10-20 10 views
0

ファイル名の一部に基づいてファイルをマージし、私はフォーマットの名前で(下のサンプル名)フォルダ内の約450 CSVファイルを持っている

1_a.csv

1_b.csv

1_cを.CSV

...

1_h.csv

2_a.csv

2_b.csv

...

2_h.csv

...

42_a.csv

...

42_h.csv

私はタイプ "1_xxx.csv"のすべてのファイルを "1.csv"に、フォーマット "2_xxx.csv"のすべてのファイルを "2.csv"に結合したいと考えています。

私はcatを使ってみましたが、一度に1セットのファイルしかマージできません。 Linuxのループでコマンドを実行する方法はありますか?どのPython3ベースのソリューションも歓迎します。

+2

https://stackoverflow.com/質問/ 13613336/python-concatenate-text-files – mnistic

+0

こんにちは、それを指摘してくれてありがとう。ただし、リンクは単にファイルをマージすることについて話します。私の質問は、名前の開始部分に基づいてそれぞれ42個のファイルに462個のファイルをグループ化し、それらをマージすることに関するものです。 –

答えて

0

pythonソリューションでは、解説はmnisticによってソリューションにリンクされています。あなたはbashのソリューションをしたい場合は、すべてのCSVファイル1_で始まり、その後、ファイル1.csvにそれらを追加を見つける必要があり

find . -name "1_*.csv" -exec cat {} >> 1.csv \; 

そのコマンドのように-execフラグを付けてfindコマンドを使用することができます。 https://ss64.com/bash/find.html

EDIT見つけるの詳細については

をチェックアウト:これは動作するはずループ

for i {1..450} 
do 
    find . -name "$i_*.csv" -exec cat {} >> $i.csv \; 
done 

について を

出典:http://go2linux.garron.me/bash-for-loop/

+0

こんにちはガリガン、迅速な対応に感謝します。私はしかし、ループで動作するソリューションを探しています。このコードでは、1で始まり2で始まるファイルに対しては42回実行する必要があります。私はそれを42回繰り返すことができる解決策を探しています。 –

+0

bashループを使用して1から42まで繰り返して、コマンドで変数を使用することができます –

+0

はいGarrigan、まさに私が探しているものですが、間違いなくコードを書く方法はわかりません。おそらくループコードをソリューションに追加してください。 –

関連する問題