awkで各行をカンマ区切りの配列の形で出力する

ふと、コンソール上で各行の内容を配列の形で出力させることができないかと思ったので、やってみることにした。
とりあえず、条件演算子(三項演算子)を使って初回のみカンマなし、次回以降はカンマありで出力させることで対応が行える。

awk {a=a?a","q$0q:q$0q}END{print "["a"]"}' q="'"
awk '!x[$0]++{a=a?a","q$0q:q$0q}END{print "["a"]"}' q="'" #重複を除外する場合
blacknon@BS-PUB-UBUNTU-01:~$ echo {a..z} {a..z} | tr -d ' ' | grep -o . | awk '{a=a?a","q$0q:q$0q}END{print "["a"]"}' q="'"
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
blacknon@BS-PUB-UBUNTU-01:~$
blacknon@BS-PUB-UBUNTU-01:~$ # 重複した値は除外する場合
blacknon@BS-PUB-UBUNTU-01:~$ echo {a..z} {a..z} | tr -d ' ' | grep -o . | awk '!x[$0]++{a=a?a","q$0q:q$0q}END{print "["a"]"}' q="'"
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
blacknon@BS-PUB-UBUNTU-01:~$ 
blacknon@BS-PUB-UBUNTU-01:~$ # 1回ごとの出力をさせる
blacknon@BS-PUB-UBUNTU-01:~$ echo {1..10} | tr ' ' '\n' | awk '!x[$0]++{a=a?a","q$0q:q$0q;print "["a"]"}' q="'"
['1']
['1','2']
['1','2','3']
['1','2','3','4']
['1','2','3','4','5']
['1','2','3','4','5','6']
['1','2','3','4','5','6','7']
['1','2','3','4','5','6','7','8']
['1','2','3','4','5','6','7','8','9']
['1','2','3','4','5','6','7','8','9','10']
Sponsored Links

※上記で使っている条件演算子(三項演算子)についてだが、以下のようなモノになる。

awk '{条件 ? 真のときに取る値 : 偽のときに取る値}'

 


Written by blacknon

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

Leave a Comment

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

*