删除特定行

0xb*_*00d 3 command-line bash text-processing

我想从 csv 文件中删除几行。

规则很简单(保持行如果):

  • 这是文件的第一行。
  • 第一个值与前一行的第一个值不同。
  • 第二个值比前一个保留的行增加了至少 10。

来源

Test1,  0.0, 1
Test1,  0.2, 1
Test1, 10.0, 3
Test2,  0.1, 1
Test2,  0.3, 3
Test2,  1.0, 5
Test2, 11.0, 7
Run Code Online (Sandbox Code Playgroud)

结果

Test1,  0.0, 1
Test1, 10.0, 3
Test2,  0.1, 1
Test2, 11.0, 7
Run Code Online (Sandbox Code Playgroud)

我想用 awk 和一些 if 语句来做这个,但我不确定我是否可以创建一个在记录处理之间传输的变量。


编辑:这隐藏在评论部分(来自我):

我刚刚发现变量可以在记录之间使用。与 C 不太一样的东西。除非有人给出我认为对其他人有用的答案或有人要求我提供答案,否则我将删除此问题。

小智 5

因为它被标记为 awk

awk -F", *" 'x!=$1||$2>=y+10{y=$2;print}{x=$1}' file


Test1,  0.0, 1
Test1, 10.0, 3
Test2,  0.1, 1
Test2, 11.0, 7
Run Code Online (Sandbox Code Playgroud)