我有2个csv文件(1.csv和2.csv)。两个文件中的列数相同。
1.csv
Server,Path,I/P Backlog,O/P Backlog
Server1,Yes,3000,200
Server3,Yes,8,0
Server5,Yes,0,0
2.csv
Server,Path,I/P Backlog,O/P Backlog
Server1,Yes,3300,180
Server3,Yes,7,0
Server5,Yes,0,0
Server6,Yes,10,200
我必须在两个csv中比较3个不同的列。
在上面的示例中,如果服务器名称相同,则找到I / P积压和o / p积压的偏差百分比,并为输入趋势和输出趋势创建2个单独的列。
如果值相同:Nochange。 如果价值增加那么它应该增加%(向上) 如果价值下降:减少%(下) 如果添加了新行:新建 如果第二个报告中不存在任何行,则无需执行任何操作。
所以我的最后一张表应如下所示。
Server Path I/P Backlog Input Trend O/P Backlog Output Trend
Server1 Yes 3300 10%(up) 180 20%(down)
Server3 Yes 7 20%(down) 0 No change
Server5 Yes 0 No change 0 No change
Server6 Yes 10 New 200 New
答案 0 :(得分:1)
扩展 @PostMapping("/post")
public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file)
解决方案:
awk
输出:
awk 'function percent(v){
if (v !~ /^[0-9]+(\.[0-9]+)?$/){ return v }
coef=1; dev="down";
if (v >= 1){ coef=-1; dev="up" }
return sprintf("%d%(%s)",(100-v*100) * coef, dev)
}
NR==1{
$4=$4 FS "Input Trend";
$6=$6 FS "Output Trend";
print
}
FNR==1{ next }{ k=$1 FS $2 }
NR==FNR{ a[k]=$3 FS $4; next }
k in a{
split(a[k], vals);
if ($3==vals[1]) ip_diff="No change";
else if (!vals[1]) ip_diff=$3"(up)";
else ip_diff=$3/vals[1];
if ($4==vals[2]) op_diff="No change";
else if (!vals[2]) op_diff=$4"(up)";
else op_diff=$4/vals[2];
print k, $3, percent(ip_diff), $4, percent(op_diff); next
}
{ print $1,$2,$3,"New",$4,"New" }' f1.csv f2.csv