同じ名前でグループ化する正規表現

同じ名前でグループ化する正規表現

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

おすすめ記事