0

以下のサンプルファイルの内容について

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 などの奇数を出力できます。

ここでは、すべてが 16 進数の数値と見なされることに注意してください。例 0000001a.0000000b は 16 進数で、8 桁の 16 進数.8 桁の 16 進数を意味します。

4

4 に答える 4

1

あなたの質問が正しく理解できることを願っています。

この1つのライナーを試すことができます:

awk -F. 'NR>1 && $1-a==0 && $2-b!=1{print}{a=$1;b=$2}' file

サンプルデータが与えられた場合、この短い行は次のように出力します。

00000001.00000006
00000001.00000010

実際のデータでテストし、結果を報告できます。それがあなたが探しているものであることを願っています。

于 2013-03-01T13:14:41.217 に答える
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
于 2013-03-01T13:14:43.323 に答える
1

を使用する 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 

16 進数の比較:

awk -F. 'strtonum("0x" $1) != x; { x = strtonum("0x" $1) }' file

結果:

00000001.00000001
00000002.00000001
0000000b.00000001
于 2013-03-01T13:21:51.580 に答える
1

もう1つ:

awk -F. 'p!=$1{p=$1; v=$2; next} v+1!=v=$2' file
于 2013-03-01T13:53:52.747 に答える