我在文本文件中有一个输入,如:
Time(1ps) *_sysclock *hy_dvdd_0 *y_vdd18_0 *s_enabled *lpi_clk_0
========== ========== ========== ========== ========== ==========
1000000000 1 1 1 11 1
1000000045 1 1 1 11 0
1000008365 1 1 1 11 1
1000009824 0 1 1 11 1
1000016685 0 1 1 11 0
1000025005 0 1 1 11 1
1000033325 0 1 1 11 0
1000035828 1 1 1 11 0
1000041645 1 1 1 11 1
1000049965 1 1 1 11 0
1000058285 1 1 1 11 1
1000061832 0 1 1 11 1
1000066605 0 1 1 11 0
我在这里要做的是: 第2列表示时钟边沿,第1列表示时间..我需要测量时钟频率。 所以我的要求是什么,因为这个脚本取第一个值取决于我运行脚本的时间,所以当时钟值从初始值改变时,在上面的例子中初始值是1,所以当它变为0时,那个时候我想将第1列值存储在一个变量中,当时钟值再次变为1时,我想存储第1列值以获得时钟脉冲持续时间。
基于我想比较这些时间差与某些预定义值进行比较。
你可以帮助我解决这个问题。
提前感谢所有人。
预期的O / P是: 我需要输出,告诉我边缘之间的差异..就像在上面的例子中: 差异在" 1000009824"时钟边沿发生第一次变化的地方。和 " 1000061832"其中时钟边沿值再次为0,表示完整的时钟周期。
答案 0 :(得分:1)
假设您在STDIN上输入了您的输入。您可能希望忽略前两行:
<> for 1..2;
然后,您可以读取一行数据:
my $line = <>; #read line from STDIN
my @initial = split(' ', $line); #split on whitespace
您可以阅读更多行,直到您看到更改:
my @final;
while ($line = <>) {
@final = split(' ', $line);
last if $final[1] != $initial[1];
}
现在您可以比较时间戳:
my $diff = $final[0] - $initial[0];
print "$initial[0] to $final[0] is $diff\n";
我建议将该行读入哈希值,因此您可以使用真正的列名而不是数组索引...但这取决于您。