假设我们有这样一个文件
$ cat txt.txt
class:A id:1 name:aa id:2 name:bb id:3 name:cc
class:B id:5 name:ab id:6 name:bc id:7 name:cd id:8 name:de id:9 name:ef
calss:C id:10 name:jack id:11 name:rose
每一行为一个班级A, B, C; 每个班有若干名同学(id, name) , 如何判断同学的id是连续递增的?
方法如下
$ cat test.txt | sed 's/id:/\n&/g; s/[^\n]*\nid:\([0-9]*\)[^\n]*name:\([^ ]*\)[^\n]*/\n\1 \2/g; s/^\n//' | awk '{id=$1; nm=$2; if(id>lstId+1) print "miss ID:", lstId, id, id-lstId-1; lstId=id}'
miss ID: 3 5 1
sed 's/id:/\n&/g; s/[^\n]*\nid:\([0-9]*\)[^\n]*name:\([^ ]*\)[^\n]*/\n\1 \2/g; s/^\n//' 很巧妙。
sed -e 'cmd' -e 'cmd2' 可以对同一行执行多条sed命令