連続した行の一部の反復部分の縮小

連続した行の一部の反復部分の縮小

メモ帳には次のデータがあります。

4480-1
4480-2
4480-3
4480-15
4581-1
4581-2
4581-3
4581-4

forループのようなものを使ってこれを行うことはできますか? sedを使用しますか?

私が望む出力は4480-1&-2&-3&-15&4581-1&-2&-3&-4

ベストアンサー1

これは働きます:

awk -F- '$1!=a{printf "%s", $1} {printf "-%s&", $2} {a=$1}' file | sed 's/&$/\n/g'

出力:

4480-1&-2&-3&-15&4581-1&-2&-3&-4

説明する:

  • awk -F-区切り記号は次のとおりです。-
  • $1!=a{printf "%s", $1}4480最初の部分が最後に処理された行と異なる場合は、最初の部分を印刷します。
  • {printf "-%s&", $2}&最後に2番目の部分を印刷してください。
  • {a=$1}処理された行にaを設定します。
  • sed 's/&$/\n/g'最後の文字aを削除し、&改行文字を追加します。

おすすめ記事