所以我给自己写了一个 awk 小脚本。其目的是在遍历该行时找到第四列的总和,然后在各行对总和的贡献百分比旁边打印记录。
代码如下所示
#!/bin/awk -f
#
{
lines[NR]=$0;
Distances[NR]=$NF;
Max_Distance+=$NF;
MAX_LINES=NR
#print length($0)
}
END{
for(i=3; i<=MAX_LINES; i++)
{
increment = Distances[i]/Max_Distance*100;
print length(lines[i]), lines[i], increment;
}
}
现在,我将此脚本应用于附加文件,这些文件的行始终具有相同数量的字段,但有时字符数量不同。
476 23 281 268 0.0421744
475 24 469 448 0.0426674
474 25 147 141 0.0434187
473 26 70 69 0.0445487
472 27 68 61 0.0482006
471 28 19 15 0.0504292
470 29 315 303 0.0508844
469 30 121 -4 0.0509563
468 31 424 407 0.0511194
467 32 189 180 0.0520713
466 33 18 14 0.0531791
465 34 117 107 0.0532455
464 35 46 43 0.0538684
463 36 179 173 0.0547426
462 37 136 109 0.0550616
461 38 42 38 0.058816
460 39 13 10 0.0640171
459 40 265 250 0.0648825
458 41 120 111 0.064891
457 42 118 99 0.0663346
456 43 464 466 0.0671883
455 44 31 28 0.0681487
454 45 213 201 0.0700088
453 46 -26 129 0.0711404
452 47 185 160 0.0731869
451 48 83 71 0.0735005
450 49 104 -1 0.0736425
449 50 346 330 0.0741638
448 51 311 -20 0.0759164
447 52 400 398 0.0767254
446 53 374 358 0.0770171
445 54 475 465 0.0774754
444 55 90 -12 0.0809141
443 56 -10 -14 0.0831925
输出有点出乎意料:
56 474 25 147 141 0.0434187 2.05997
56 473 26 70 69 0.0445487 2.11359
56 472 27 68 61 0.0482006 2.28685
56 471 28 19 15 0.0504292 2.39258
56 470 29 315 303 0.0508844 2.41418
56 469 30 121 -4 0.0509563 2.41759
56 468 31 424 407 0.0511194 2.42533
56 467 32 189 180 0.0520713 2.47049
56 466 33 18 14 0.0531791 2.52305
56 465 34 117 107 0.0532455 2.5262
56 464 35 46 43 0.0538684 2.55575
56 463 36 179 173 0.0547426 2.59723
56 462 37 136 109 0.0550616 2.61237
55 461 38 42 38 0.058816 2.79049
56 460 39 13 10 0.0640171 3.03725
56 459 40 265 250 0.0648825 3.07831
55 458 41 120 111 0.064891 3.07872
56 457 42 118 99 0.0663346 3.14721
56 456 43 464 466 0.0671883 3.18771
56 455 44 31 28 0.0681487 3.23328
56 454 45 213 201 0.0700088 3.32153
56 453 46 -26 129 0.0711404 3.37521
56 452 47 185 160 0.0731869 3.47231
56 451 48 83 71 0.0735005 3.48719
56 450 49 104 -1 0.0736425 3.49393
56 449 50 346 330 0.0741638 3.51866
56 448 51 311 -20 0.0759164 3.60181
56 447 52 400 398 0.0767254 3.64019
56 446 53 374 358 0.0770171 3.65403
56 445 54 475 465 0.0774754 3.67578
56 444 55 90 -12 0.0809141 3.83892
56 443 56 -10 -14 0.0831925 3.94702
我说意外是因为在其中两行中,最后一个字段与其余行仅通过空格分隔,而在所有其他情况下,它由制表符分隔。我现在的问题是为什么会这样以及我该如何解决它?
提前致谢!
我希望所有字段间隔相等,并且在最后一列和行的其余部分之间始终有一个制表符。我已经尝试过使用不同类型的打印语句
备注:我想我有一个解决方法,但我现在真的很想知道为什么它会这样。
一种可能的方法是使用格式化的
print
命令。您可以通过替换行来尝试:
print length(lines[i]), lines[i], increment;
与
printf "%s %-60s %-20s\n", length(lines[i]), lines[i], increment;
随意填写以调整字段长度