よろしくお願いします!
次の3つの列を持つファイルがあります。
serv1 red group1
serv1 black group1
serv1 orange group1
serv1 red group2
serv1 orange group2
serv1 red group3
serv1 black group3
serv1 orange group3
serv2 orange group1
serv2 red group2
serv2 orange group2
serv2 red group3
serv2 black group3
serv2 orange group3
serv3 orange group1
serv3 red group1
私はそれを次のように見せます:
serv1 group1 red black orange
serv1 group2 red orange
serv1 group3 red black orange
serv2 group1 orange
serv2 group2 red orange
serv2 group3 red black orange
serv3 group1 orange red
最初のコードと次のコードでグループ化しようとすると問題はありませんが、複数のコードをグループ化することはできません。
awk '{ V_GRUPO[$1]= (V_GRUPO[$1]==""?"":V_GRUPO[$1] OFS) $2 }END { for(x in V_GRUPO) print x, V_GRUPO[x] }' file.txt
serv1 red black orange red orange red black orange
serv2 orange red orange red black orange
serv3 orange red
¿どうしたの? ? ?
ありがとうございます! !
ベストアンサー1
入力のフィールドが複数の空白(ある種の「きれいな印刷テーブル」形式)に分割されており、2番目のフィールドの項目を他の2つのフィールドに基づいてスペースで区切られたリストに縮小したいとします。
$ mlr --pprint -N nest --ivar ' ' -f 2 then reorder -f 1,3,2 file
serv1 group1 red black orange
serv1 group2 red orange
serv1 group3 red black orange
serv2 group1 orange
serv2 group2 red orange
serv2 group3 red black orange
serv3 group1 orange red
これは、以下を使用して元のフィールドを縮小して並べ替えます。ミラー(mlr
)。
データがタブで区切られ(TSV)、タブで区切られた出力が必要な場合--pprint
に変更します--tsv
。折りたたまれたデータのリストに別の区切り文字を必要--ivar ' '
に応じて変更します(例--ivar ';'
:使用;
)。
たとえば、タブで区切られた入力と出力の場合は、;
リスト区切り記号として使用します。
$ mlr --tsv -N nest --ivar ';' -f 2 then reorder -f 1,3,2 file
serv1 group1 red;black;orange
serv1 group2 red;orange
serv1 group3 red;black;orange
serv2 group1 orange
serv2 group2 red;orange
serv2 group3 red;black;orange
serv3 group1 orange;red
TSV入力を読み取り、各フィールドにラベルを追加し、数値フィールドの代わりに対応するラベルを使用し、素敵に印刷された表形式の出力を生成する別の例:
$ mlr --itsv --implicit-csv-header --opprint --barred label Server,Colour,Group then nest --ivar ';' -f Colour then reorder -f Server,Group,Colour file
+--------+--------+------------------+
| Server | Group | Colour |
+--------+--------+------------------+
| serv1 | group1 | red;black;orange |
| serv1 | group2 | red;orange |
| serv1 | group3 | red;black;orange |
| serv2 | group1 | orange |
| serv2 | group2 | red;orange |
| serv2 | group3 | red;black;orange |
| serv3 | group1 | orange;red |
+--------+--------+------------------+