对于
下面的示例文件内容00000001.00000001
00000001.00000002
00000001.00000003
00000001.00000004
00000001.00000006
00000001.00000010
00000002.00000001
00000002.00000002
00000002.00000003
00000002.00000004
0000000b.00000001
需要查找无序数据。这里的故障意思是00000001.00000004接下来应该是00000001.00000005而不是00000001.00000006,如上所述。 00000001.00000010也是一个错误的条目,因为00000001.00000006下一个00000001.00000007应该到来。
使用awk我们可以从上面的文件打印奇怪的00000001.00000006和00000001.00000010。
请注意,这里所有都被视为十六进制的数字。 EG 0000001a.0000000b是十六进制数,表示8digithexadecimal.8digithexadecimal。
答案 0 :(得分:1)
我希望我理解你的问题。
你可以试试这个班轮:
awk -F. 'NR>1 && $1-a==0 && $2-b!=1{print}{a=$1;b=$2}' file
根据您的示例数据,此短线输出:
00000001.00000006
00000001.00000010
您可以使用实际数据进行测试,并报告结果。我希望这正是你要找的。 p>
答案 1 :(得分:1)
awk '{print (NR>1&&!(($1-a)=="1e-08"||($1-a)=="1"))?$1" < OutOfOrder":$1;a=$1}'
00000001.00000001
00000001.00000002
00000001.00000003
00000001.00000004
00000001.00000006 < OutOfOrder
00000001.00000010 < OutOfOrder
00000002.00000001
00000002.00000002
00000002.00000003
00000002.00000004
0000000b.00000001 < OutOfOrder
答案 2 :(得分:1)
这是使用awk
的一种方式:
awk -F. 'NR > 1 && $1==a && $2 + 0 != b + 1; { a=$1; b=$2 + 0 }' file
结果:
00000001.00000006
00000001.00000010
<强> EDIT1: 强>
awk -F. 'NR > 1 && strtonum("0x" $1) == a && strtonum("0x" $2) != b + 1; { a=strtonum("0x" $1); b=strtonum("0x" $2) }' file
结果:
00000001.00000006
00000001.00000010
<强> EDIT2: 强>
字符串比较:
awk -F. '$1 != x; { x = $1 }' file
十六进制比较:
awk -F. 'strtonum("0x" $1) != x; { x = strtonum("0x" $1) }' file
结果:
00000001.00000001
00000002.00000001
0000000b.00000001
答案 3 :(得分:1)
还有一个:
awk -F. 'p!=$1{p=$1; v=$2; next} v+1!=v=$2' file