Bashから次のデータを読み取る最良の方法は何ですか?たとえば、データが次のようになると、ls -l
1行ずつ読み取ることができ、ファイル内のすべての詳細が1行にあります。この場合、次の形式のデータがあります。ここで、各レコードは空行で区切られます。私はこのデータのクエリを書くための基本的なアイデアを探しています。
Source: test
Destination: test2
Status: Idle
Progress: -
State: Source
Lag: 16:45:45
Mirror Timestamp: Wed Nov 5 21:00:27 PST 2014
Base Snapshot: 1573980876tsfr10_vol.550
Current Transfer Type: -
Current Transfer Error: -
Contents: -
Last Transfer Type: -
Last Transfer Size: 944856 KB
Last Transfer Duration: 00:01:42
Last Transfer From: -
Source: test12
Destination: test123
Status: Idle
Progress: -
State: Source
Lag: 10:41:00
Mirror Timestamp: Thu Nov 6 03:05:12 PST 2014
Base Snapshot: 1573980876prd11_vol.1678
Current Transfer Type: -
Current Transfer Error: -
Contents: -
Last Transfer Type: -
Last Transfer Size: 83982000 KB
Last Transfer Duration: 03:21:38
Last Transfer From: -
Source: abcd
Destination: xyz
Status: Idle
Progress: -
State: Source
Lag: 02:40:52
Mirror Timestamp: Thu Nov 6 11:05:20 PST 2014
Base Snapshot: (1573980876prd12_vol.912
Current Transfer Type: -
Current Transfer Error: -
Contents: -
Last Transfer Type: -
Last Transfer Size: 17520680 KB
Last Transfer Duration: 01:23:56
基本的に私が考えることができる1つのオプションは、各レコードに15個の値があるため、15を繰り返し、各行を読み取ってから、照会中のデータを見つけることです。たとえば、「ソーステストの転送サイズ」を見つけようとした場合。
答え1
おそらくこのperlは役に立ちます。各段落をハッシュとして読み取り、フィールドを名前で直接参照できます。
perl -00 -F':\s+|\n' -anE '
%data = @F;
say "last transfer of test = ", $data{"Last Transfer Size"}
if $data{Source} eq "test";
' file
last transfer of test = 944856 KB
この-00
オプションは、一連の空行に基づいて入力をレコードに分割します。
この-F
オプションは、フィールド区切り文字を改行またはコロンとスペースに設定します。
この-n
オプションを使用すると、スクリプトはファイル内のすべてのレコードに対して繰り返されます。
この-a
オプションは、レコードをフィールドに分割して @F 配列に保存します。
あなたの質問に示されている先行スペースが実際にあなたのファイルにないと仮定します。
答え2
答え3
手動で確認する場合は2回使用できますgrep
。
- 正しいソース名(オブジェクト)を使用するために一度。
grep "<source/destination name>" -A 15
オブジェクトとそのサブフィールドの両方が印刷されます(行15)。 - 2番目にサブフィールド(オブジェクトのプロパティ)を見つけます。
grep "<property name>"
。
たとえば、一緒にいる場合:
$ cat testfile.txt | grep "abcd" -A 15 | grep "Transfer Size"
Last Transfer Size: 17520680 KB
手動検査には問題はありませんが、自動検査にはより多くの情報が必要です。また、データベースはこれらのクエリに最適です。