時々、列名が共通した同じ形式のファイルを、ひとまとめにしたいときがある。
例えば、以下のようなファイルがあるとする。
network_stats_table.*.txtで、*の部分だけ異なるような場合だ。
その任意のファイルの中身が以下のように、列名と数値でできているとする。
列名を一行目にして、その下にすべてのファイルのデータを結合したい場合を考える。
まず、1つのファイルから列名を取り出し、さらに、これ以降、順に下に結合していく際に、どのファイル由来のデータかわかるように、1列目にサンプル名としてsampleという列名を加える。
head -n 1 network_stats_table.D_Farm.txt | sed 's/^/sample\t/' > network_stats_all.txt
network_stats_all.txtは出力ファイルだ。"sample\t"の部分は、タブ区切りということ。スペース区切りであれば"sample "となる。
このファイルに、network_stats_table.*.txtとなっている任意のファイルのデータと、その*の部分をsample列(1列目)に入れていく。
for file in network_stats_table.*.txt; do
prefix=$(echo "$file" | sed 's/network_stats_table.\(.*\).txt/\1/')
(printf "%s\t" "$prefix"; tail -n +2 "$file")
done >> network_stats_all.txt
ここも,"%s\t"はタブ区切りの場合。スペース区切りの場合は"%s "
完成したテキストファイル↓
Comments