我想比较csv文件中同一列的行,并仅保留符合以下条件的行
1.如果第一个模式与上一行中的模式相同,则
2.第二列中的值之差等于abs(1)
例如,如果我有这行
aaaa;12
aaaa;13
bbbb;11
bbbb;9
cccc;9
cccc;8
我只会保留
aaaa;12
aaaa;13
cccc;9
cccc;8
答案 0 :(得分:2)
逻辑将以这种方式工作:
尝试将其翻译成代码,然后在有疑问时回来。
答案 1 :(得分:1)
假设:
$ echo "$test"
aaaa;12
aaaa;13
bbbb;11
bbbb;9
cccc;9
cccc;8
您可以执行以下操作:
$ echo "$test" | awk -F ";" 'function abs(v) {return v < 0 ? -v : v} $1==l1 && abs($2-l2)==1 {print l1 FS l2 RS $0} {l1=$1;l2=$2}'
aaaa;12
aaaa;13
cccc;9
cccc;8