Bash – 根据列添加行中的值
发布时间:2020-12-15 21:00:54 所属栏目:安全 来源:网络整理
导读:我的csv文件中的第二列有重复项.我想根据这些重复项添加第1列中的关联值. 示例csv: 56,cc=DK49,cc=US34,cc=GB32,cc=DE32,cc=NZ31,cc=DK31,cc=GB31,cc=GB 示例结果: 96,cc=GB # where 96 = 34+31+3187,cc=DK # where 87 = 56+3132,cc=NZ 解决方法 您可以在a
我的csv文件中的第二列有重复项.我想根据这些重复项添加第1列中的关联值.
示例csv: 56,cc=DK 49,cc=US 34,cc=GB 32,cc=DE 32,cc=NZ 31,cc=DK 31,cc=GB 31,cc=GB 示例结果: 96,cc=GB # where 96 = 34+31+31 87,cc=DK # where 87 = 56+31 32,cc=NZ 解决方法
您可以在awk中使用关联数组:
awk '{s[$2]+=$1}END{for(k in s)print s[k]",",k}' inFile 为了便于阅读而扩展,并使用sum / key而不是s / k: { # Do for each line. sum[$2] += $1 # Add first field to accumulator,# indexed by second field. # initial value is zero. } END { # Do this bit when whole file processed. for (key in sum) # For each key like cc=US: print sum[key] "," key # Output the sum and key. } 这是我的盒子上运行的示例: pax$echo;echo '56,cc=GB' | awk '{s[$2]+=$1}END{for(k in s)print s[k]","k}' 32,cc=DE 96,cc=NZ 49,cc=US 87,cc=DK 尽管第一列的格式为999(注意末尾的逗号),但这只是因为awk在评估数字上下文中的字符串时,只使用在该上下文中有效的前缀.因此45xyzzy将变为45,更重要的是,49变为49. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |