2016-07-29 9 views
-1

私は300のディレクトリ/フォルダを持ち、各ディレクトリには2つのカラムの単一ファイル(xxx.gz)があり、すべてのファイルを1つのファイルにマージしたい。すべてのファイルで、最初の列は同一の識別子(ID)です。複数のディレクトリ/フォルダから複数のファイルをマージする方法

すべてのファイルを1つのファイルにマージするにはどうすればよいですか?

そして、各列のヘッダーをそれぞれのディレクトリにあるファイルの名前として使用したいと思います。 (68a7eb0a-123、b5694957-764、等。)とファイル名は以下のとおりです:

ディレクトリ名があるさ(a5c403c2、292c4a2fなど)、 ディレクトリ名と、それぞれのファイル名が同じではありません、私のようにファイル名を欲しいですヘッダ。

all directories 
ls 
6809b1c3-75a5 
68e9b641-0cc9 
71ae07b8-8bde 
b7815cd2-1e69 
.. 
.. 

each directory contain single file: 

cd 6809b1c3-75a5 

ls bd21dc2e.txt.gz 
+1

を例ディレクトリ構造とファイルの内容と期待される最終的なファイルを表示してください。 –

+1

[すべてのファイルを読む](http://stackoverflow.com/questions/11433432/importing-multiple-csv-files-into-r)[リスト内で複数のdata.framesをマージ](http:// stackoverflow .com/questions/8091303/simultaneous-merge-multiple-data-frames-in-a-list)を参照してください。このソリューションは、ファイルサイズとメモリに応じて動作するはずです。 – zx8754

+0

@mona [編集](http://stackoverflow.com/posts/38660539/edit)を使用して投稿を追加情報で更新してください。 – zx8754

答えて

0

このお試しください:

for i in * ; do for j in $i/*.gz ; do echo $j >> ../final.txt ; gunzip -c $j >> ../final.txt ; done ; done 

注釈付きバージョン:

for i in *      # for each directory under current working directory 
    do        # have nothing else in there 
    for j in $i/*.gz    # for each gzipped file under directories 
    do 
    echo $j >> ../final.txt  # echo path/file to the final file 
    gunzip -c $j >> ../final.txt # append gunzipping the file to the final file 
    done 
done 

結果:

$ head -8 ../final.txt 
6809b1c3-75a5/bd21dc2e.txt.gz 
blabla 
whatever 
you 
have 
in 
those 
files 
関連する問題