0

基本的にログ全体を切り取り、残りのフィールドが2つになるまで文字列を切り取り、フィールド1で一意にソートし、フィールド番号とフィールド1が同じ場合は右側のフィールドを合計するログファイルがあります。例

80 128 
443 40
80 100
25  20 
443 44
80 128 

結果は

80 356
443 84
25  20

私が抱えている問題は、出力が次のようになる場合がある場所を切り取った最初のフィールドに矛盾があることです。

80 128

そして時にはそうです

80(LOCAL\randomuser) 128

だから私の出力は次のようになります

80 356
80(LOCAL\randomuser) 128
443 84
25  20

これは、80(LOCAL\randomuser) が一意の行であるためです。

(LOCAL\randomuser) を持たない行は同じままで、(LOCAL\randomuser) が存在する行から削除されるように、最初のフィールドを最初に正規化するにはどうすればよいですか。

4

3 に答える 3

1

使用する

awk '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input

つまり、最初のフィールドをキーとして使用し、最後のフィールドを追加します。

例のように最初の数字と の間にスペースがない場合は、(awk にも分割するように指示します(

awk -F"[ (]+" '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input

出力:

$ awk '{a[$1]+=$NF} END{for (i in a) print i, a[i]}' input
25 20
80 356
443 84

(LOCAL\randomuser)存在する場合だけを削除する別の方法として、次を使用できますsed

sed 's/(.*)//' input
于 2013-03-01T19:10:44.143 に答える
0

grep -vパターンを含まない行に一致します。grepに到達する前に出力をパイプしますcut

于 2013-03-01T19:07:13.433 に答える