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
同じギャザーで始まるすべてのものをグループ化し、それらの間に1つの新しい行を挿入したいので、最終出力は次のようになります。
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
。
答え2
$ awk -F':' '!NF{next} $1 != prev{if (NR>1) print ""; prev=$1} 1' file
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