Excel公式/ AWK等效
我试图从几个文件自动化许多计算。 我已经用Excel做了,并且需要公式。
我的inputInput.txt
是
Start End 0 0 1793 3233 3147 4045 4085 6751 28077 29336 29258 31431 29304 30010 31528 42846
我想要得到的是从Start
到End
的Size
,并减去可能的重叠:例如,在第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)
是否有一个bash
, awk
,或任何脚本,我可以获得列“处理许多文件?
先谢谢你。
尝试下面的脚本。
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
把你想要的标题放在工作上。