top of page
  • takaohi

列名が共通したデータを持つ複数のテキストファイルを上下に結合【Linux】

時々、列名が共通した同じ形式のファイルを、ひとまとめにしたいときがある。

例えば、以下のようなファイルがあるとする。

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 "

完成したテキストファイル↓


閲覧数:9回0件のコメント
bottom of page