我有一个CSV文件,在这里与3场和第三场,我想对行分组到不超过25
鉴于组总结行“;(PE.502); 24
”CW-04“;(PE.501); 25
”CW-05“;(PE.518,PE.518-1); 2
”CW- 06“;(PE.517); 1
”CW-07“;(PE.516); 3
”CW-08“;(PE.515); 1
”CW-09“; .514); 1
“CW-10”;(PE.513,PE.513-1); 23
“CW-11”;(PE.512); 8
“CW-12”;(PE.511); 1
“CW-13”;(PE.510); 3
“CW- (PE.509);
“CW-15”;(PE.508,PE.508-1); (PE.506); 1
“CW-18”;(PE.505); 1
“CW-19”;(PE.521,PE.569); 2
“CW- 20“;(PE.520,PE.568); 17
”CW-21“;(PE.519,PE.567); 17
”CW-22“;(PE.526,PE.526- 1,PE.574 ,PE.574-1); 4
“CW-23”;(PE.525,PE.573); 2
“CW-24”;(PE.524,PE.572); 2
“ CW-25“;(PE.523,PE.571); 3
”CW-26“;(PE.522,PE.522-1,PE.570,PE.570-1); 19
所需输出:
“CW-03”;(PE.502);
“CW-04”;(PE.501);
“CW-05”; (PE.518,PE.518-1,PE.517,PE.516,PE.515,PE.514); 8
“CW-10”;(PE.513,PE.513-1) ;
“CW-11”; (PE.509,PE.510,PE.511,PE.512); 15
你能帮我吗?awk中如何能在40
0
A
回答
0
AWK溶液:
awk 'BEGIN{ FS=OFS=";" }
f{ if(c+$3 > 25) { gsub(/\),\(/,",",r); print r,c; f=c=0 } else { c+=$3; r=r","$2 } }
!f && c<25{ f=1; c=$3; r=$1 FS $2 }
END{ if(c) gsub(/\),\(/,",",r); print r,c }' file
输出:
"CW-03";(PE.502);24
"CW-04";(PE.501);25
"CW-05";(PE.518,PE.518-1,PE.517,PE.516,PE.515,PE.514);8
"CW-10";(PE.513,PE.513-1);23
"CW-11";(PE.512,PE.511,PE.510,PE.509);15
"CW-15";(PE.508,PE.508-1,PE.507,PE.506,PE.505,PE.521,PE.569);22
"CW-20";(PE.520,PE.568);17
"CW-21";(PE.519,PE.567,PE.526,PE.526-1,PE.574,PE.574-1,PE.525,PE.573,PE.524,PE.572);25
"CW-25";(PE.523,PE.571,PE.522,PE.522-1,PE.570,PE.570-1);22
1
$ cat awk-script
function print_line(str1,str2,sum)
{
print str1 OFS "(" str2 ")" OFS sum # print the format as your request
}
NR==1 {
str1=$1
str2=$3 # Use the str2 to store the combined output for $3
sum=$5 # Use sum to store the sum of $5
next
}
{
sum+=$5
if (sum>25){ # If sum is greater than 25
print_line(str1,str2,sum-$5) # print the line in the desired format
str1=$1 # and reset the str1 to $1
str2="" # str2 to ""
sum=$5 # sum to $5
}
str2=(str2?str2",":str2"")$3 # update the str2 based on if str2 is ""
}
END {
print_line(str1,str2,sum) # flush the final result
}
使用下面的命令采用AWK-脚本,
$ awk -F'[();]' -v OFS=';' -f awk-script file
"CW-03";(PE.502);24
"CW-04";(PE.501);25
"CW-05";(PE.518,PE.518-1,PE.517,PE.516,PE.515,PE.514);8
"CW-10";(PE.513,PE.513-1);23
"CW-11";(PE.512,PE.511,PE.510,PE.509);15
"CW-15";(PE.508,PE.508-1,PE.507,PE.506,PE.505,PE.521,PE.569);22
"CW-20";(PE.520,PE.568);17
"CW-21";(PE.519,PE.567,PE.526,PE.526-1,PE.574,PE.574-1,PE.525,PE.573,PE.524,PE.572);25
"CW-25";(PE.523,PE.571,PE.522,PE.522-1,PE.570,PE.570-1);22
相关问题
- 1. awk中如何传递参数的功能,从内AWK称为
- 2. 我如何在AWK
- 3. AWK/bash中如何将一个文件名在AWK
- 4. 如何使用filename在AWK
- 5. 如何获得在AWK
- 6. 如何使AWK
- 7. 如何用awk
- 8. 如何用awk
- 9. 如何用awk
- 10. 如何用awk
- 11. 如何用awk
- 12. 如何在awk中创建子文件?
- 13. 如何在awk中扩展字符串
- 14. 如何在git中使用awk --msg-filter
- 15. 如何在awk中匹配新行?
- 16. 如何在Perl脚本中使用Awk?
- 17. 如何在Perl中使用paste和awk?
- 18. 如何避免在chome 40中保存密码?
- 19. 如何在matlab中显示40 gabor滤波器
- 20. 如何在Objective-C和Android中添加两个40位数字
- 21. 性能调优AWK?
- 22. PySide QFTP只能上传35-40字节
- 23. 如何使用awk
- 24. 如何使用AWK
- 25. awk中的Uniq;在使用AWK
- 26. #awk如果其他循环不能在ksh中工作
- 27. 如何使用awk在我的文件AWK-测试
- 28. AWK:如何在Bash中将列式文件读取到AWK脚本?
- 29. @转换为%40在GET
- 30. MySQL表中的40列
这可能是凌晨在这里,但我真的不明白你是如何达到理想的输出。请澄清。 –