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

shell
[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

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

bash
awk '{if($1!=a){print "--";print;a=$1}else{print}}END{print "--"}'
shell
[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 --