2017-11-04 18 views
-1

私は以下のような入力ファイルを持っています。シェルで列の値を追加

pmx . pmnosysrelspeechneighbr -m 1 -r 

INFO: The ROP files contain suspected faulty counter values. 
They have been discarded but can be kept with pmr/pmx option "k" (pmrk/pmxk) or highlighted with pmx option "s" (pmxs) 


Date: 2017-11-04 
Object    Counter     14:45 15:00 15:15 15:30 
UtranCell=UE1069XA0 pmNoSysRelSpeechNeighbr  0  1  0  0 
UtranCell=UE1069XA1 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1069XA2 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1069XA3 pmNoSysRelSpeechNeighbr  0  0  2  0 
UtranCell=UE1069XB0 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1069XB1 pmNoSysRelSpeechNeighbr  0  0  0  3 
UtranCell=UE1069XB2 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1069XB3 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1069XC0 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1069XC1 pmNoSysRelSpeechNeighbr  0  0  0  4 
UtranCell=UE1069XC2 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1069XC3 pmNoSysRelSpeechNeighbr  0  0  1  0 
UtranCell=UE1164XA0 pmNoSysRelSpeechNeighbr  0  3  0  0 
UtranCell=UE1164XA1 pmNoSysRelSpeechNeighbr  0  0  0  0 
UtranCell=UE1164XA2 pmNoSysRelSpeechNeighbr  1  0  0  0 

は今、私は基本的に($3から$6まで)時間列値の合計で以下のように出力したいです。

Counter     14:45 15:00 15:15 15:30 
pmNoSysRelSpeechNeighbr  1  4  3  7 

私は以下のコマンドで試してきました。

awk -v g=pmNoSysRelSpeechNeighbr '$0 ~ g { for(i=3;i<=6;i++) sum[i]+=$i } 
            END { printf g; for(i=3;i<=6;i++) printf OFS sum[i] }' file 

だけのグループ(カウンタ)のを含む行(記録)用:合計列別途のそれぞれにあなたが必要

pmx . pmnosysrelspeechneighbr -m 1 -r | grep - i ^Object| awk '{sum += $4} END {print $1 , sum}' 

答えて

0

:しかし、それはただ1つの列の値の合計を与えています関心($0~"pmNoSysRelSpeechNeighbr")。 awkが既に/regex/ { action }、またはvar ~ /regex/ { action }によるフィルタリング拡張正規表現をサポートしているので

注あなたは(ほとんど)、awkにパイプgrepの出力する必要はありません。 1つの例外はPCRE(grep -P)の必要性です。テキストファイルの単純な「コマンドラインstatistical operations」のawkに対する代替として


、あなたもGNU datamashを使用することができます。

たとえば、列2で3〜6列の合計が、グループします

grep 'UtranCell' file | datamash -W -g2 sum 3-6 
0

は、これを試してみて、あなたが個々の列の合計としてヘッダとトレーラの両方を取得します。

BEGIN { 
    trail="pmNoSysRelSpeechNeighbr"; 
} 
{ 
    if($1=="Object") print $2 OFS $3 OFS $4 OFS $5 OFS $6; 
    else if($1 ~ /^UtranCell/) { 
     w+=$3; x+=$4; y+=$5; z+=$6; 
    } 
} 
END { 
    print trail OFS w OFS x OFS y OFS z; 
} 
+0

こんにちは、1行で使用できますか? –

関連する問題