获取列的和+;awk+;双引号+;迭代

获取列的和+;awk+;双引号+;迭代,awk,Awk,这是我的档案: $ cat -v test6 | head "Rec_Open_Date"|"MSISDN"|"IMEI"|"Data_Volume_Bytes"|"Device_Manufacturer"|"Device_Model"|"Product_Description"|"Data_Volume_MB"|">20MB/30"|">200MB/30"|">2048MB/30"|">5120MB/30"|">10240MB/30" "2015-10-06"|"

这是我的档案:

$ cat -v test6 | head
"Rec_Open_Date"|"MSISDN"|"IMEI"|"Data_Volume_Bytes"|"Device_Manufacturer"|"Device_Model"|"Product_Description"|"Data_Volume_MB"|">20MB/30"|">200MB/30"|">2048MB/30"|">5120MB/30"|">10240MB/30"
"2015-10-06"|"427"|"060"|"137765"|"Samsung Korea"|"Samsung SM-G900I"|"$39 Plan"|"0.131383"|"0"|"0"|"0"|"0"|"0"
"2015-10-06"|"592"|"620"|"0"|"Apple Inc"|"Apple iPhone 6 (A1586)"|"PREPAY  STD - TRIAL - #16"|"0"|"0"|"0"|"0"|"0"|"0"
"2015-10-06"|"007"|"290"|"0"|"Apple Inc"|"Apple iPhone 6 (A1586)"|"PREPAY PLUS - $0 -"|"0"|"0"|"0"|"0"|"0"|"0"
"2015-10-06"|"592"|"050"|"48836832"|"Apple Inc"|"Apple iPhone 5S (A1530)"|"Talk and Text Connect Flexi Plan"|"46.5744"|"1"|"1"|"0"|"0"|"0"
"2015-10-06"|"409"|"720"|"113755347"|"Samsung Korea"|"Samsung SM-G360G"|"$29 CARRYOVER PLAN"|"108.486"|"1"|"1"|"1"|"0"|"0"
"2015-10-06"|"742"|"620"|"19840943"|"Apple Inc"|"Apple iPhone S (A1530)"|"PREPAY STD - $0 - #2"|"18.9218"|"1"|"1"|"0"|"0"|"0"
"2015-10-06"|"387"|"180"|"0"|"HUAWEI Technologies Co Ltd"|"HUAWEI HUAWEI G526-L11"|"PREPAY STD - $1 - #4"|"0"|"0"|"0"|"0"|"0"|"0"
"2015-10-06"|"731"|"570"|"2258243"|"Samsung Korea"|"Samsung SM-N910U"|"Business Freedom"|"2.15363"|"1"|"0"|"0"|"0"|"0"
"2015-10-06"|"556"|"910"|"13332272"|"Samsung Korea"|"Samsung GT-I9505"|"$49 Plan"|"12.7146"|"1"|"1"|"0"|"0"|"0"
这是我获得1列sume的方法,我必须删除“usinggsub”

$ awk -F'|' 'NR>1{n=$9; gsub(/"/,"",n); sum+=n} END {print sum}' test6
684
我想做的是实现类似这样的东西,它遍历每一列

awk '{for (i=1;i<=NF;i++) sum[i]+=$i;}; END{for (i in sum) print "for column "i" is " sum[i];}' FileA
作为和附加的问题,如果我能实现这样的目标,有什么好处呢?例如:

>20MB/30 is 684
>200MB/30 is x
>2048MB/30 is y
>5120MB/30 is z
>10240MB/30 is aa
我用
NR==1
尝试过这个方法,但没有成功

EDIT1可能在这里发现了什么

awk -F'|' 'NR>1{for (i=9;i<NF;i++) n=$i; gsub(/"/,"",n); sum[i]+=n} END {print sum[i]}' test6
24

EDIT3 对于以下答案,只需进行一些格式化:

awk -F'|' 'NR>1{for (i=9;i<=NF;i++) {gsub(/"/,"",$i); sum[i]+=$i}}; NR==1{for (i=9;i<=NF;i++) {col[i]=$i}};  END{for (i in sum) print "for column "col[i]"  the sum is " sum[i];}' test6
for column ">200MB/30"  the sum is 457
for column ">2048MB/30"  the sum is 86
for column ">5120MB/30"  the sum is 24
for column ">10240MB/30"  the sum is 6
for column ">20MB/30"  the sum is 684
awk-F'|''NR>1{对于(i=9;i200MB/30),总和为457
对于“>2048MB/30”列,总和为86
对于“>5120MB/30”列,总和为24
对于“>10240MB/30”列,总和为6
对于“>20MB/30”列,总和为684
试试:

gsub
修改
$i
并返回它所做的替换数,通常为2。上面的语句将所做的替换数相加。将其替换为:

{gsub(/"/,"",$i); sum[i]+=$i}

这将修改
$i
,然后将其添加到
sum[i]

中,而不是使用
|
作为分隔符,您可以使用
来代替(并去掉
gsub
):

awk-F'\''NR>1{for(i=9;i
awk -F'|' 'NR>1{for (i=9;i<=NF;i++) {gsub(/"/,"",$i); sum[i]+=$i}}; NR==1{for (i=9;i<=NF;i++) {col[i]=$i}};  END{for (i in sum) print "for column "col[i]"  the sum is " sum[i];}' test6
for column ">200MB/30"  the sum is 457
for column ">2048MB/30"  the sum is 86
for column ">5120MB/30"  the sum is 24
for column ">10240MB/30"  the sum is 6
for column ">20MB/30"  the sum is 684
$ awk -F'|' '{for (i=9;i<=NF;i++) {gsub(/"/,"",$i); sum[i]+=$i}}; END{for (i in sum) print "for column "i" is " sum[i];}' test6
for column 9 is 5
for column 10 is 4
for column 11 is 1
for column 12 is 0
for column 13 is 0
sum[i]+=gsub(/"/,"",$i)
{gsub(/"/,"",$i); sum[i]+=$i}
 awk -F'\"' 'NR>1{for(i=9;i<NF/2;i++)sum[i]+=$(i*2)}END{for(i in sum) print "for column "i" is "sum[i]}' test