我正在尝试从多个文件中自动执行许多计算。我已经用Excel完成了它并且需要公式。
我的输入Input.txt
是
Start End
0 0
1793 3233
3147 4045
4085 6751
28077 29336
29258 31431
29304 30010
31528 42846
我想要的是从Size
到Start
的{{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)
或任何脚本,我可以使用这些脚来处理许多文件?
提前谢谢。
答案 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
根据需要放置标题就可以了。