2017-11-21 7 views
-3

を組み合わせる:私はそのほとんどがどのように見える、囲碁チャンネルに入るメッセージのストリームを持っている共通のプレフィックスサブストリングに

T: added package to graph: acl-devel/2.2.52_4/armv6l-musl T: added package to graph: rofs-filtered/1.7_1/x86_64-musl T: added package to graph: rofs-filtered/1.7_1/HOST T: added package to graph: libshout/2.4.1_1/i686 T: added package to graph: mate-terminal/1.18.1_1/armv6l T: added package to graph: bullet-devel/2.86.1_1/x86_64-musl T: added package to graph: bullet-devel/2.86.1_1/HOST T: added package to graph: cubietruck-uboot/2016.11_1/armv6l-musl T: added package to graph: libfontenc/1.1.3_1/i686-musl T: added package to graph: apk-tools/2.8.1_1/x86_64 T: added package to graph: virtualbox-ose/5.1.28_1/armv7l-musl T: added package to graph: acl-devel/2.2.52_4/armv7l T: added package to graph: apk-tools/2.8.1_1/x86_64-musl T: added package to graph: tzutils/2017c_1/x86_64-musl T: added package to graph: python-argh/0.26.2_1/noarch T: added package to graph: tzutils/2017c_1/HOST

私は効率的に上記の文字列を組み合わせることができるようにしたい、行ずつ、しかし、情報を失う。これはIRCチャンネルへの印刷用ですので、私は洪水警報を引き起こしたくありません。 、私は以下に似ているように上記をマッサージすることを行うには:

T: added package to graph: rofs-filtered/1.7_1/{x86_64-musl,HOST} T: added package to graph: libshout/2.4.1_1/i686 T: added package to graph: mate-terminal/1.18.1_1/armv6l T: added package to graph: bullet-devel/2.86.1_1/{x86_64-musl,HOST} T: added package to graph: cubietruck-uboot/2016.11_1/armv6l-musl T: added package to graph: libfontenc/1.1.3_1/i686-musl T: added package to graph: apk-tools/2.8.1_1/{x86_64,x86_64-musl} T: added package to graph: virtualbox-ose/5.1.28_1/armv7l-musl T: added package to graph: acl-devel/2.2.52_4/{armv6l-musl,armv7l} T: added package to graph: tzutils/2017c_1/{x86_64-musl,HOST} T: added package to graph: python-argh/0.26.2_1/noarch

出力とメッセージのさらに多くが、報告の大部分は、などの共通の接頭辞で約10〜12行です上記のように、複数のスレッドの出力に散在しています(したがって、上記のデータでは重複数が少なく、多くのスレッドとデータは約2秒のスナップショットです)。

複数の行をまとめて、共通の接頭辞に沿って結合する方法を教えてください。

+1

? – maerics

+0

私はこれまでのことを試していません。私は最善のアプローチを探しています。私が今に置いたものは、推測に過ぎません。私が知っている限り、私はこの問題のためにどんな言葉をGoogleに伝えていないのですか、私の問題を解決するために待っている標準ライブラリ関数があります。 – Aviator45003

答えて

1

ここに1つの解決策があります。必要ならば、append()コマンドの前に重複をチェックすることができます。あなたがこれまでに試してみましたが、なぜあなたの試みが動作していない何

https://play.golang.org/p/XodCgl1fa5

package main 

import (
    "bufio" 
    "fmt" 
    "strings" 
) 

func main() { 
    input := `T: added package to graph: acl-devel/2.2.52_4/armv6l-musl 
T: added package to graph: rofs-filtered/1.7_1/x86_64-musl 
T: added package to graph: rofs-filtered/1.7_1/HOST 
T: added package to graph: libshout/2.4.1_1/i686 
T: added package to graph: mate-terminal/1.18.1_1/armv6l 
T: added package to graph: bullet-devel/2.86.1_1/x86_64-musl 
T: added package to graph: bullet-devel/2.86.1_1/HOST 
T: added package to graph: cubietruck-uboot/2016.11_1/armv6l-musl` 

    m := make(map[string][]string) 
    s := bufio.NewScanner(strings.NewReader(input)) 
    for s.Scan() { 
     t := s.Text() 
     i := strings.LastIndex(t, "/") 
     p := t[:i+1] 
     last := t[i+1 : len(t)] 
     m[p] = append(m[p], last) 
    } 
    for k, v := range m { 
     fmt.Print(k, "{", strings.Join(v, ","), "}", "\n") 
    } 
} 
関連する問題