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 配列に保存します。
あなたの質問に示されている先行スペースが実際にあなたのファイルにないと仮定します。