一連の数字から見つからない数字を検索する

一連の数字から見つからない数字を検索する

だから私は多くの情報を含むファイルを持っており、情報の各「塊」には次の一意の識別子があります。

「インデックス」:数字

Linuxで次のコマンドを使用した後:

$ cat file | grep index

私は次のような結果を得ます。

"index": 1
"index": 2
"index": 3
...
"index": 10001

その間に、連続形式の一連の数字があります。

そこのどこかに数字が抜けていますが、その数字を把握しようとしています。

私はいくつか試してみましたが、そのうち何も動作しませんでした。追加できる他のコマンドはありますか?または、欠落しているインデックスマークを検索するより良い方法はありますか?

ベストアンサー1

このコマンドを使用して、diffファイルと N から M までの一連の数字の違いを確認できます。このawkコマンドは、テキストを解析して数字のみを取得するために使用されます。

diff --side-by-side --suppress-common-lines  <(awk '{print $2}' file.txt) <(seq 1 10001) | awk '{print $2}'

上記のコードは1ファイル番号をのシーケンスと比較します10001

以上機能のこれを実装する方法は、ファイルの最後の番号(10001)を検出して変数に割り当てることです。

max=$(tail -1 file.txt | awk '{print $2}')
diff --side-by-side --suppress-common-lines  <(awk '{print $2}' file.txt) <(seq 1 $max) | awk '{print $2}'

たとえば、次のようになります。

ファイル.txt:

"index": 1
"index": 5
"index": 8
"index": 9
"index": 10
"index": 12
"index": 13
"index": 15
max=$(tail -1 file.txt | awk '{print $2}')
diff --side-by-side --suppress-common-lines  <(awk '{print $2}' file.txt) <(seq 1 $max) | awk '{print $2}'

出力:

2
3
4
6
7
11
14

ただし、欠落している値をこの形式で印刷するには、最後のステートメントを次のように"index": the_missing_number変更できます。awk print

diff --side-by-side --suppress-common-lines  <(awk '{print $2}' file.txt) <(seq 1 $max) | awk '{print "\"index\": "$2}'

おすすめ記事