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

2021-04-06Bash,Docker,Ubuntu