我有一些文本文件,其中包含“sr”和“dr”格式的读者 - 作者锁的输出,它们是“start read”和“done read”以及“sw”和“dw”的缩写“这是”开始写“和”完成写“的缩写。
基本上,我试图记录当前读者的数量和当前作者的数量。例如,当前作者的数量将在'sw'行上增加,在'dw'行上减少。
例如,我的第一个文本文件包含以下内容:
sr
sw
dw
dr
所以,那个输出应该是:
$ awk -f check-rwlock.awk test1.txt
maxr = 1, maxw = 1
reader/writer test: FAIL
writer/writer test: PASS
因为读取器和写入器操作之间存在重叠,所以测试“FAILED”,而写入器操作之间没有重叠,因此测试“PASSED”。
这是我写的awk
脚本:
/sr/{
read_count++
}
/sw/{
write_count++
}
END{
print "maxr = " read_count", " "maxw = " write_count
}
我怎样才能进一步修改我的脚本,以便通过读写器和编写器/编写器的测试获得我想要的输出?
答案 0 :(得分:1)
解决方案:
/^sr/ {
cr++
mxr = cr>mxr ? cr : mxr
}
/^sw/ {
cw++
mxw = cw>mxw ? cw : mxw
}
/^dr/ { cr-- }
/^dw/ { cw-- }
cr && cw { rwf=1 }
cw>1 { wwf=1 }
END {
print "maxr = " mxr ", maxw = " mxw
print "reader/writer test: " (rwf ? "FAIL" : "PASS")
print "writer/writer test: " (wwf ? "FAIL" : "PASS")
}
示例输入:
sr
dr
sw
dw
sr
sw
sw
dr
dw
dw
示例输出:
maxr = 1, maxw = 2
reader/writer test: FAIL
writer/writer test: FAIL
请注意,您的脚本不计算最大并发操作数,它只计算所有已启动的操作。因此我的输入结果不正确。