Linuxコンソール上で特定の列の値を元に区切り文字を入れてグループ分けする
Pocket

先日行ってきた第24回シェル芸勉強会で、タイトルのような特定の列の値を元に、区切り文字を入れてグループ分けするという処理があったので、忘れないように残しておく。
例えば、以下のようなファイルがあったとする。

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
CCCC 23
AAAA 123
BBBB 244
BBBB 2233
AAAA 444
BBBB 2435
AAAA 244
DDDD 888
CCCC 53534
AAAA 4456

 

Sponsored Links

このファイルについて、1列目の値に応じてソートしなおし、それぞれの間に区切り文字を入れるには、以下のようにawkコマンドを実行する。

awk '{if($1!=a){print "--";print;a=$1}else{print}}END{print "--"}'
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
CCCC 23
AAAA 123
BBBB 244
BBBB 2233
AAAA 444
BBBB 2435
AAAA 244
DDDD 888
CCCC 53534
AAAA 4456
[root@BS-PUB-CENT7-01 ~]# sort /tmp/test.txt | awk '{if($1!=a){print "--";print;a=$1}else{print}}END{print "--"}'
--
AAAA 123
AAAA 244
AAAA 444
AAAA 4456
--
BBBB 2233
BBBB 2435
BBBB 244
--
CCCC 23
CCCC 53534
--
DDDD 888
--
Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。