2

次のデータを特定の順序で並べ替えたい。別の方法で並べ替えを試みましたが、解決策が見つかりませんでした。助けてください。私は Unix の初心者です。:(

データ:-

method1:entry:2013.09.18.19.18.30
method1:exit:2013.09.18.19.18.30
method2:entry:2013.09.18.19.18.30
method2:exit:2013.09.18.19.18.30
method3:entry:2013.09.18.19.18.30
method4:entry:2013.09.18.19.18.30
method4:exit:2013.09.18.19.18.30
method1:entry:2013.09.18.19.18.30
method1:exit:2013.09.18.19.18.30
method3:exit:2013.09.18.19.18.30
method3:entry:2013.09.18.19.18.30
method5:entry:2013.09.18.19.18.30
method5:exit:2013.09.18.19.18.30
method3:exit:2013.09.18.19.18.30

望ましい出力:-

method1:entry:2013.09.18.19.18.30
method1:exit:2013.09.18.19.18.30
method1:entry:2013.09.18.19.18.30
method1:exit:2013.09.18.19.18.30
method2:entry:2013.09.18.19.18.30
method2:exit:2013.09.18.19.18.30
method3:entry:2013.09.18.19.18.30
method3:exit:2013.09.18.19.18.30
method3:entry:2013.09.18.19.18.30
method3:exit:2013.09.18.19.18.30
method4:entry:2013.09.18.19.18.30
method4:exit:2013.09.18.19.18.30
method5:entry:2013.09.18.19.18.30
method5:exit:2013.09.18.19.18.30

並べ替えは、メソッド名と「入口と出口」の出現に基づく必要があります。

4

2 に答える 2

1

これを試して :

sed -e 's/:/ /g' file.txt | sort |
awk 'BEGIN { var_entry="entry"; var_exit="exit"; flag="entry" }
    { if (flag == $2 && var_entry ==$2 ){
        i = 0; flag=var_exit; }
      else if (flag == $2 && var_exit == $2 ){
        i = 0; flag=var_entry; };
      i++ ; print i, $0 }' |
sort -t" " -k 2,2 -k 1,1 | sed 's/^[0-9]* //g'

この背後にあるロジックは次のとおりです。

  1. sed -e 's/:/ /g:区切り文字が一貫するようにスペースに 置き換えます。

  2. sortmethod1列でソートするだけです。

  3. awkentry exitステップは別の列を追加して、その列でソートできるようにして、マッチングのようなパターンを作成しmethod1ます。出力は次のとおりです。

    1 Method1 Entry 2013.09.18.18.30
    2 Method1 Entry 2013.09.18.18.30
    1 Method1 Exit 20133.09.18.19.18.30 2
    Method1 Exit 20133.09.18.19.18.30
    1 Method2 Entry 20133.09.18.19.18.30エントリー2013.09.18.19.18.30 2 Method3エントリ2013.09.18.19.18.30 1 Method3 Exit 2013.09.18.19.18.30 1 Exit 20133.09.18.19.18.30 1 Method4 Entry 20133.09.18.19.18.30 1 Method4 Exit .18.19.18.30 1 method5 出口 2013.09.18.19.18.30









  4. sort -t" " -k 2,2 -k 1,1: 次にsortmethod1列 (2 列目) で競合が発生した場合は、新しく追加された列 (つまり、競合) で競合を解決します。1列目。出力は次のとおりです。

    1 Method1 Entry 2013.09.18.18.30
    1 Method1 Exit 2013.09.18.18.30 2
    Method1エントリ20133.09.18.19.19.18.30
    2 Method1 Exit 20133.09.18.19.18.30
    1 Method2 Entry 20133.09.18.19.18.30エントリー2013.09.18.19.18.30 1 Method3 Exit 2013.09.18.19.18.30 2 Method3 Entry 2013.09.18.19.18.30 1 Exit 20133.09.18.19.18.30 1 Method4 Entry 20133.09.18.19.18.30 1 Method4 Exit .18.19.18.30 1 method5 出口 2013.09.18.19.18.30









  5. sed 's/^[0-9]* //g': 作成された余分な列を削除します。

于 2013-10-03T08:33:14.430 に答える