Bashシェルスクリプトでcsvの行と列を入れ替えるために csvtool を使う

2021-04-06Bash,Docker,Ubuntu

シェルスクリプトで csv の行と列を入れ替える必要がありました。

Web を探してみると awk を使って変換する例がいくつか見つかりましたが、
もっと簡単に実現する方法はないか調べてみたところ、 csvtool という面白そうなツールがありました。

今日はこのツールを紹介します。

検証環境

$ uname -moi
x86_64 x86_64 GNU/Linux

$ bash -version | head -n 1
GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

インストール

まずは csvtool をインストールします。

$ apt update -y

$ apt install csvtool -y

$ csvtool --help
csvtool - Copyright (C) 2005-2006 Richard W.M. Jones, Merjis Ltd.
        - Copyright (C) 2007- Richard W.M. Jones & Christophe Troestler
...

簡単にインストールできました。

csvtool の使い方

使い方を説明するために、簡単な csv ファイルを作成します。

少し分かりにくいコマンドを実行しますが、 5 行 3 列 の csv ファイルを作りたいだけです。

# ***ここは今回のエントリの本筋ではないので説明を省略します!***
$ seq 1 15 | xargs -n 3 echo | sed 's/ /,/g' > test.csv

$ cat test.csv
1,2,3
4,5,6
7,8,9
10,11,12
13,14,15

この csv ファイルを csvtool を使って 3 行 5 列 の csv に変換してみましょう。

$ csvtool transpose test.csv
1,4,7,10,13
2,5,8,11,14
3,6,9,12,15

このように csv ツールを使うと簡単に csv の行と列を入れ替えることができます。

MacやCentOSなど、Debian系以外のLinuxで利用したい人向け

他のPCへのインストール方法が見つからなかったため、インストールしなくても利用できるように Dockerイメージとして公開 しました。

Docker Cloud build status
Docker Pulls
Docker Cloud Automated build

dockeri.co

使い方も記載してあるので、もしよければ使ってください。

ひとこと

最近は Docker の普及に伴い、以前よりも apt パッケージを比較的容易にインストールできるようになりました。
それでもインストールすることができない環境であれば awk を使うのが良いでしょう。

2021-04-06Bash,Docker,Ubuntu