次の 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
作業用に作成されたパーサーは、構造化された標準形式のデータを解析するために使用する必要があります。以下を含む、シェルスクリプトやコマンドラインのいくつかの一般的な形式用に事前作成されたパーサーがあります。JSON、XML、CSV他の人。
答え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'])