Excel公式/ AWK等价物

时间:2013-10-04 20:05:26

标签: excel bash awk

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

我的输入Input.txt

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

我想要的是从SizeStart的{​​{1}}并减去可能的重叠:例如在第4行中,End(3147)与第3行(3233)的Start重叠,因此由于重叠,有效End仅为813。

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

我想要的输出Size是:

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 的总和,它告诉我有效的总大小。

我已在Excel中将原始$4添加到A列和B列,并使用下一个公式获取Input.txt $3的{​​{1}}列(大小) ,无负面,重叠,无负面)

$6(C):Out.txt

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

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

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

是否有$6=IF(E3>0,E3,0)或任何脚本,我可以使用这些脚来处理许多文件?

提前谢谢。

1 个答案:

答案 0 :(得分: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

根据需要放置标题就可以了。