手元のデータをKeynoteのグラフ描画のデータに流し込むために表の形式に整形しようと思ったところ、1ツイートに収まらないくらい長く書いてしまいました。そこで
1 A hoge
— Masaki Waga (@MasWag) 2018年9月28日
1 B fuga
2 A piyo
2 B pohe
みたいなデータを
A B
1 hoge fuga
2 piyo pohe
みたいにtsvとかで整形するのってもしかしてShellでやるの大変なやつか?(あっさり書けそうで書けてない)
というツイートをしたところ、@papiron さんから
ご存知かもしれませんが、Tukubaiコマンドが使える環境でしたら、mapコマンド使うと出来ますね。https://t.co/SZYtkhmEBF
— ぱぴろんちゃん🎧 (@papiron) 2018年9月28日
ということでTukubaiのmap を教わったのでTukubaiを良く知らないということの自戒を込めて使ってみました。ちなみにこの原稿はJupyter Notebookのbash_kernelを使って書いています。
環境は以下です。
which map
map --help
map num=1 << EOF
1 A hoge
1 B fuga
2 A piyo
2 B pohe
EOF
欠損しているデータがある場合はデフォルトだと0が与えられます。
map num=1 << EOF
1 A hoge
1 B fuga
2 A piyo
2 B pohe
3 A fugaa
EOF
欠損データのデフォルト値は -m
オプションで指定することができます。
map -m なし num=1 << EOF
1 A hoge
1 B fuga
2 A piyo
2 B pohe
3 A fugaa
EOF
インデックスが複数フィールド存在するとき¶
縦のインデックスが複数フィールド存在するときはnum
の値を変更します。
map num=2 << EOF
1年 1組 A hoge
1年 1組 B fuga
1年 2組 A piyo
1年 2組 B pohe
EOF
横のインデックスが複数フィールド存在するときは以下の様です。
map num=1x2 << EOF
1年 1組 A hoge
1年 1組 B fuga
1年 2組 A piyo
1年 2組 B pohe
EOF
データが複数フィールド存在するとき¶
データが複数存在するときは新たにA,Bとラベル付けして縦の列に追加してくれます。
map num=1 << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
ラテン文字ではなく、数値でラベル付けをして欲しいときは-n
オプションを使います。
map -n num=1 << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
横のデータを横方向に展開させたいときは+yarr
を付けます。
map +yarr num=1 << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
+yarr
を付けた場合も-n
で数値でラベル付けることができます。
map +yarr -n num=1 << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
同様a,bのラベル付けが不要なときは+arr
を付けます。
map +arr num=1 << EOF
1年 1組 hoge hogee
1年 2組 fuga fugaa
2年 1組 piyo poyoo
2年 2組 pohe pohee
EOF
一行のデータを複数に区切る方法¶
-<数値>
オプションを使うことで、データをよしなに区切ることもできます。
map -3 num=1 << EOF
X x 1 2 3 4 5 6
X y 7 8 9 A B C
Y x D E F G H I
Y y J K L M N O
EOF
但し欠損データの補完はできない様です。
map -3 num=1 << EOF
X x 1 2 3 4 5 6
X y 1 2 3 4 5
Y x 1 2 3 4 5 6
Y y 1 2 3 4 5 6
EOF
結論¶
Tukubaiは便利