9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

複数のCSVファイルをマージするコマンド

Last updated at Posted at 2020-10-19

カレントディレクトリ内にあるCSVファイルをマージします。

各CSVにヘッダが無い場合

cat *.csv
```

ワイルドカード`*`でファイル名を展開し、`cat`で結合して出力します。たとえばディレクトリ内のCSVファイルが`1.csv``2.csv``3.csv`ならば、`cat 1.csv 2.csv 3.csv`と同じ結果になります。ファイルに出力する場合は、

````bash
cat *.csv > result

のようにリダイレクトすれば、resultに出力されます。

各CSVにヘッダがある場合

各CSVにヘッダがある場合は、1行目を除いてマージします。

find -name "*.csv" -exec sed -e '1d' {} \;

find -name [pattern]は、カレントディレクトリ内のファイル名が[pattern]にマッチするファイルの一覧を取得します。findコマンドに-execオプションをつけると、マッチした各々のファイルに対して、引数で与えたコマンドを実行します。引数内の{}はマッチしたファイル名に変換されて実行されます。たとえば、1.csv2.csv3.csvがマッチしたとすると、sed -e '1d' 1.csvsed -e '1d' 2.csvsed -e '1d' 3.csvが各々実行されます。最後の;-execオプションの引数の終わりを意味しますが、シェルの構文と解釈されないよう、\;とエスケープしています。

sedは文字列の抽出や置換をするコマンドです。sed -d '[N]d' [file]で、[file]のN行目を除いて出力します。

また、次のように書くこともできます。

find -name "*.csv" | xargs -n 1 sed -e '1d'

xargs [command]は、標準入力を[command]の引数に渡します。-nオプションは、一度にコマンドに渡す引数の数を指定します。上のコマンドでは、たとえば標準入力に1.csv2.csv3.csvが渡された場合、sed -e '1d' 1.csvsed -e '1d' 2.csvsed -e '1d' 3.csvが各々実行されます。このオプションを指定しないと、標準入力がsed -e '1d' 1.csv 2.csv 3.csvのようにまとめてコマンドに渡されます。後者は「1.csv2.csv3.csvをマージした結果」の1行目を取り除いて出力することになり、1つ目以外のヘッダは残ったままになります。また、cat *.csv | sed -e '1d'とした場合も同様に、結合後のファイルの1行目を取り除くことになり、期待する結果になりません。

sedの代わりにtailコマンドを使ってもできます。

find -name "*.csv" -exec tail -n +2 {} \;

または

find -name "*.csv" | xargs -n 1 tail -n +2

tail -n [- or +N] [filename]で、 filenameの後ろを出力します。-Nを指定した場合は後ろからN行を出力します。+Nを指定した場合はN行目から末尾までを出力します。

結果ファイルにヘッダを付けたい場合は、どれか1つのファイルの1行目を付け足せばよいです。

cat *.csv | head -n 1 > result && find -name "*.csv" -exec sed -e '1d' {} \; >> result

または

cat *.csv | head -n 1 > result && find -name "*.csv" -exec tail -n +2 {} \; >> result

head -n [N]は、標準入力の先頭N行を出力します。

&&は、前のコマンドが正常終了ならば、後に続くコマンドを実行します。

以上です。誤り等ございましたらご指摘お願いします。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?