Excel公式/ AWK等效

我试图从几个文件自动化许多计算。 我已经用Excel做了,并且需要公式。

我的inputInput.txt

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

我想要得到的是从StartEndSize ,并减去可能的重叠:例如,在第4行中, Start (3147)与第3行End (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中添加了原来的Input.txt到列A和B,并使用下面的公式获得Out.txt (大小,无负数,重叠,无负数)的$3$6

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

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

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

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

是否有一个bashawk ,或任何脚本,我可以获得列“处理许多文件?

先谢谢你。

尝试下面的脚本。

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 

把你想要的标题放在工作上。