我在使用Geth进行挖掘之后正在制定基准。这是一个简单的bash脚本。我将终端的日志保存在txt文件中。我需要在第三个字段中找到写有“提交”的每一行。我用命令
找到了它awk /'new mining work/ {print $2,$3}' /home/ubuntu/geth-general/node1.txt
结果与此类似:
[06-03|12:15:19.020] Commit
[06-03|12:15:20.009] Commit
[06-03|12:15:21.008] Commit
[06-03|12:15:22.003] Commit
[06-03|12:15:23.011] Commit
[06-03|12:15:24.009] Commit
[06-03|12:15:25.005] Commit
[06-03|12:15:26.006] Commit
[06-03|12:15:27.005] Commit
[06-03|12:15:28.010] Commit
[06-03|12:15:29.017] Commit
我需要将每个时间戳记行保存为一个变量,并找到连续的行(感谢时间)。我当时在考虑一个FOR循环,但是我不能选择一行。
我尝试了awk“ NR”的功能,但未显示任何结果。
awk /'new mining work/ {if(NR==5) print $2,$3}' /home/ubuntu/geth-general/node1.txt
awk /'new mining work/ && NR==3 {print $2,$3}' /home/ubuntu/geth-general/node1.txt
我希望输出:
[06-03|12:18:37.014] Commit
例如,然后我可以将其放入变量和过程中,以进行下一个操作,例如
[06-03|12:18:38.016] Commit
答案 0 :(得分:2)
如果要查找匹配的第五行并打印该行和所有后续的匹配行:
awk '/new mining work/ && ++count >= 5 {print $2,$3}' /home/ubuntu/geth-general/node1.txt
这将预增加计数变量(由于短路评估,仅当正则表达式匹配成功时)。
您也可以使用该count
变量来测试范围:
awk '/new mining work/ && ++count >= 5 && count <=23 {print $2,$3}' /home/ubuntu/geth-general/node1.txt
这将在第23次找到匹配项后停止打印。
请注意,我更正了单引号的位置。