我有超过70,000行和11列的行。第四列是一个位置。我想计算每一行的位置比上一行中的位置高100,并且比下一行中的位置低100。
我想在不将数据导入R的情况下这样做,所以我可以放入我的shell脚本。然而,我并不是那种经验丰富的人。
数据示例:
class Sprite {
shared_ptr<Texture> tex;
int x, y;
public:
Sprite(shared_ptr<Texture> t, int x, int y) tex(t), x(x), y(y) {}
void draw(HDC dc, int dest_x, int dest_y) {
BitBlt(dc, dest_x, dest_y, 32, 32, *tex, x, y, SRCCOPY);
}
};
我想计算第3行和第6行,因为它们在第4列中的值满足了我的要求,所以我的输出应该是&#34; 2&#34;。
我试图搜索有关如何执行此操作的信息,但现在已经停留了一段时间。
答案 0 :(得分:3)
要求救援!
$ awk '$4>p+100 && p>pp+100{c++} {pp=p;p=$4} END{print c}' file
2
解释
$4>p+100 && p>pp+100{c++}
如果字段4大于prev + 100且prev大于prev prev + 100则递增计数器(以零初始值开始)
{pp=p;p=$4}
设置新的prev prev和prev
END{print c}
打印计数器。
答案 1 :(得分:1)
你可以使用这个awk:
awk 'srec && NR==srec+1 && $4>sv+100{count++; sv=srec=0}
frec && NR==frec+1 && $4>fv+100{fv=frec=0; sv=$4; srec=NR}
{fv=$4; frec=NR}
END{print count}' file
2