1

我正在尝试从多个文件中自动执行许多计算。我已经用 Excel 完成了它并拥有所需的公式。

我的输入Input.txt

Start   End
0   0
1793    3233
3147    4045
4085    6751
28077   29336
29258   31431
29304   30010
31528   42846

我想要得到的是SizeStartEnd并减去可能的重叠:例如,在第 4 行中,Start(3147)与End第 3 行(3233)重叠,因此Size由于重叠,有效值仅为 813。

此示例中的第 8 行 (29304 - 30010) 不仅重叠,而且包含在第 7 行 (29258 - 31431) 中,因此它不会添加任何有效大小。

我想要的输出Out.txt是:

Start   End Size    No-Negatives    Overlap No-Negatives
0   0   0   0   0   0
1793    3233    1442    1442    -1792   0
3147    4045    813 813 87  87
4085    6751    2668    2668    -39 0
28077   29336   1261    1261    -21325  0
29258   31431   2096    2096    79  79
29304   30010   -1420   0   2128    2128
31528   42846   11320   11320   -96 0

我需要的最终数字,一旦我有完整的表格,我可以很容易地计算出来,$4它是告诉我有效总大小的总和。

我已经在 Excel 中完成了将原始添加到列 A 和 B 并使用下一个公式来Input.txt获取列(大小、无负数、重叠、无负数)$3$6Out.txt

$3(C):=B3-(A3+F3)+2

$4(四):=IF(C3>0,C3,0)

$5(五):=B2-A3+1

$6(F):=IF(E3>0,E3,0)

是否有bash,awk或任何脚本可以用来获取列 `` 来处理许多文件?

先感谢您。

4

1 回答 1

1

尝试以下脚本。

内容script.awk

BEGIN { 
    FS = OFS = "\t"
}

FNR >= 3 { 
    $5 = L2 - $1 + 1 
    $6 = $5 > 0 ? $5 : 0 
    $3 = $2 - ($1 + $6) + 2 
    $4 = $3 > 0 ? $3 : 0 
    print $0
}

{
    L2 = $2
}

FNR < 3 { 
    print
    next
}

假设以下内容infile

S Scer  E Scer
0   0
1793    3233
3147    4045
4085    6751
28077   29336
29258   31431
29304   30010
31528   42846

像这样运行它:

awk -f script.awk infile

这会产生:

S Scer  E Scer
0   0 
1793 3233 1442 1442 -1792 0
3147 4045 813 813 87 87
4085 6751 2668 2668 -39 0
28077 29336 1261 1261 -21325 0
29258 31431 2096 2096 79 79
29304 30010 -1420 0 2128 2128
31528 42846 11320 11320 -1517 0

把你想要的标题留给你工作。

于 2013-10-04T20:31:55.933 回答