文字列行から整数を抽出する

文字列行から整数を抽出する

テキストファイルから数字を抽出するのに問題があります。デフォルトでは次のようになります(すべて1行に表示されます。読みやすくするためにここでは区切ります)。

[{"id":1,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197540,"frame_content":"some other informations...},
{"id":2,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197552,"frame_content":"some other informations...},
{"id":3,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197556,"frame_content":"some other informations...},
{"id":4,"width":720,"height":480,"longitude":20.104258199768,"timestamp":1510690197558,"frame_content":"some other informations...},
and so on.....]

私がやりたいことは、タイムスタンプタグの後のすべての値を抽出することです。問題は私です。ファイルは1行だけで構成されます。これにより少しトリッキーになり、変更できないようです。インターネット上で解決策を見つけてsedコマンドを試しましたが、これまでは成功しませんでした。grep

この問題のお手伝いをいただきありがとうございます:)

ありがとうございます!

答え1

ファイルが正しい形式のJSONファイルであると仮定すると、JSONパーサーを使用して解析する必要があります。

使用jqファイルのJSONパーサー:

$ jq '.[] | .timestamp' filename.json
1510690197540
1510690197552
1510690197556
1510690197558

この式は、.[] | .timestamp配列内のすべてのオブジェクトに対して暗黙的なループを作成し、timestamp各オブジェクトから値を抽出します。

次のように書くこともできます。

$ jq '.[].timestamp' file.json

無関係:

id最大値を持つオブジェクトを見つけるにはtimestamp:

$ jq 'max_by(.timestamp).id' file.json
4

JSONファイルをきれいに印刷するには:

$ jq . file.json

答え2

あなたはそれを使用することができます

grep -oP '"timestamp":\s*\K\d+' filename

すべてが1行にあることは重要ではありません。 "timestamp:" 文字列の後に表示されるすべての数字を検索します。

結果:

1510690197540
1510690197552
1510690197556
1510690197558

答え3

奇妙な解決策:

awk -F, '{ for (i=1;i<=NF;i++) { if ($i~/timestamp/) { split($i,slt,":");print slt[2]  } } }' filename

結果:

1510690197540
1510690197552
1510690197556
1510690197558

カンマで区切られた各フィールドを繰り返し、フィールドとパターンをタイムスタンプと一致させます。一致するものがある場合は、次のようにフィールドを配列sltに分割します。次に、配列の2番目の要素を印刷します。

関連情報