我想跳转到文件第33866行中的特定行。如果此行中的第三个数字在-10和+10的范围内,那么我想要打印整个下一行,33867,到文件并停止。
如果不是那么它应该看第67893行(+34027的差异),现在如果它在范围内 - 打印下一行并停止。
这应该继续,接下来看10,10行(差异为+34027),依此类推,直到找到该范围内的值或到达文件末尾。
现在无论是否打印任何东西,我都需要它来重复这个过程但是在新的起始线上,这次新的起始线是33869(差异3),将第33870行打印到同一个文件。 理想情况下,它会重复n次,n是用户在运行脚本时输入的读取值。
如果这个问题太多,请立即阻止我,我会回到墙上敲头,在网上搜索如何自己完成这项工作。如果我试图跳转到特定的行并且应该通过其他方式搜索该行,我也知道我是否采用了错误的方法。 任何输入都非常感谢!
编辑: 以下是处理两行的示例:
17.33051021 18.02125499 30.40520932
1.776579372 -23.74037576 12.48448432
第一个数字从第6列开始,第二个数字从26开始,第三个从46开始。(如果忽略忽略,我认为这不重要)
答案 0 :(得分:2)
阅读你的问题,我想你的文件可能很大。另外我假设“第3个数字”是第3个字段。所以我想出了这个单行:
awk -v l=33866 -v d=34027 'NR==l&&$3>=-10&&$3<=10{p=1;next}p{print;exit}{l+=d}' file
您只需要更改两个参数(l (first line No. you need to check)
和d (difference)
)。
找到正确的打印行后,awk会停止处理文件中的其他行。
aa bb 2 dfd 3 asf 555
,555
? 答案 1 :(得分:0)
由于我们没有任何输入可供测试,我在没有测试的情况下给你答案。
tl=$(wc -l input)
awk '{
for (i=33866; i<tl; i+=34027) {
if (NR==i && $3 >= -10 && $3 <= 10) {
getline;
print;
exit;
}
}
}' input