foo.txtには次の行があります。
aaa:6600 location: US
aaa:6622 location: US
xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU
ggg:7701 location: KR
ggg:8808 location: KR
同じように始まるすべての集計をグループ化し、その間に新しい行を追加したいので、最終出力は次のようになります。
aaa:6600 location: US
aaa:6622 location: US
xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU
ggg:7701 location: KR
ggg:8808 location: KR
ベストアンサー1
awk -F: '/^$/{next}$1!=f&&NR>1{print ""}{f=$1;print;}' foo.txt
与えられた
aaa:6600 location: US
aaa:6622 location: US
xxx:6601 location: EU
xxx:6602 location: EU
xxx:6603 location: EU
ggg:7701 location: KR
ggg:8808 location: KR
サンプルデータについて
説明する。
フィールド-F:
はコロンで区切られます。/^$/{next}
入力の空白行がすべてスキップされたことを示します。$1!=f&&NR>1{print ""}
現在の名前が保存された名前と異なり、f
ファイルの行番号が1より大きい場合は、空の行を印刷して新しいグループを起動します。{f=$1;print}
すべての行の名前を保存し、そのf
行を印刷します。短くする方法はいくつかありますが、私にとってはこの方法が基本ですawk
。