awkを使用してファイルを回転しようとしています。以下は私の入力ファイルの例です。
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AI,UP,HR,UPE,GSM,F,PP,4,NA,0.2,0.8
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AI,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,AIR,UP,HR,UPE,GSM,F,PP,1,NA,0.2,0.2
P2P,P2P,MP,DL,BIR,UP,HR,UPE,GSM,S,PP,10,NA,0.2,2
P2P,P2P,MP,KT,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
P2P,P2P,MP,MM,AIR,UP,HR,UPE,GSM,S,PP,1,NA,0.2,0.2
必要な出力は次のようになります。
AIR,5,1
AI,1,0.2
BIR,10,2
- ここの最初のフィールドはに属します
$5
。 - 2番目のフィールドは
$12
(total$12
)に属します。 - 3番目のフィールドは
$15
(total$15
)に属します。
条件は次の条件を満たす必要がありますawk
。
$3=="MP" && $10=="S" && $5!="MP"
ベストアンサー1
そしてawk
:
awk -F, '$3=="MP"&&$10=="S"&&$5!="MP"{a[$5]+=$12;b[$5]+=$15}
END{for(i in a){print i","a[i]","b[i]}}' file
-F,
区切り記号をに設定します,
。$3=="MP"&&$10=="S"&&$5!="MP"{...}
問題の条件ですa[$5]+=$12;b[$5]+=$15
a
の合計値で配列を入力し、$12
の合計値で配列を入力します。b
$15
END{...}
このブロックは、awk
すべての行が処理された後に実行されます。for(i in a)
a
配列を通るループprint i","a[i]","b[i]}
配列とそのインデックスの値の両方を印刷します。
出力:
AI,1,0.2
AIR,5,1
BIR,10,2