grep ソート列

grep ソート列

次の test.txt があります。出力を印刷するには、xvf-9c3683ff コマンドを使用します。ただし、xvf-bcb500dfを出力する必要があります。最後の日付に基づいています。

cat test.txt | awk '{print $2}' s/"//g' | grep xvf | ヘッド -1

テスト.txt

{
    "date": "2017-01-30T10:55:46.000Z", 
    "Id": "xvf-9c3683ff"
}, 
{
    "date": "2017-01-26T12:58:20.000Z", 
    "Id": "xvf-bcb500df"
}, 
{
    "date": "2017-01-31T18:33:20.000Z", 
    "Id": "xvf-ee07b28d"
}

出力は結果の下に印刷する必要があります。
xvf-bcb500df

答え1

[これがJSON形式のファイルであると仮定すると(]開始と終了の両方がありません)、jq:

$ jq 'sort_by(.date)' data.json
[
  {
    "date": "2017-01-26T12:58:20.000Z",
    "Id": "xvf-bcb500df"
  },
  {
    "date": "2017-01-30T10:55:46.000Z",
    "Id": "xvf-9c3683ff"
  },
  {
    "date": "2017-01-31T18:33:20.000Z",
    "Id": "xvf-ee07b28d"
  }
]

最初のものを取得するにはId

$ jq 'sort_by(.date)|.[0].Id' data.json
"xvf-bcb500df"

引用符なしでコンテンツを取得するには:

$ jq -r 'sort_by(.date)|.[0].Id' data.json
xvf-bcb500df

作業用に作成されたパーサーは、構造化された標準形式のデータを解析するために使用する必要があります。以下を含む、シェルスクリプトやコマンドラインのいくつかの一般的な形式用に事前作成されたパーサーがあります。JSONXMLCSV他の人。

答え2

ステップ1:フォーマットを調整する:

$ cat data.json | json -ga date Id
2017-01-30T10:55:46.000Z xvf-9c3683ff
2017-01-26T12:58:20.000Z xvf-bcb500df
2017-01-31T18:33:20.000Z xvf-ee07b28d

次のステップ:IDをソートして印刷します。

cat data.json | json -ga date Id | sort | awk 'NR==1{print $2}'

jsonコマンドラインツールは、次の記事で説明されています。http://trentm.com/json/。必要とすれば、

  • ノードのインストール
  • そしてsudo npm install -g json

答え3

次のことを試すことができます。

| awk '{print $2}' | sed -n '/"/N;s/\n//;s/"//gp' | sort | awk -F, '/xvf/{print $2}' | head -n1

例:

$ echo '{
    "date": "2017-01-30T10:55:46.000Z", 
    "Id": "xvf-9c3683ff"
}, 
{
    "date": "2017-01-26T12:58:20.000Z", 
    "Id": "xvf-bcb500df"
}, 
{
    "date": "2017-01-31T18:33:20.000Z", 
    "Id": "xvf-ee07b28d"
}' | awk '{print $2}' | sed -n '/"/N;s/\n//;s/"//gp' | sort | awk -F, '/xvf/{print $2}' | head -n1
xvf-bcb500df

編集 - Pythonメソッド

データが有効であることを確認JSONしたら、次のスクリプトを使用できます。

import json

with open('test.txt', 'rt') as file:
   data = sorted(json.load(file), key=lambda x: x['date'])
   print(data[0]['Id'])

関連情報