2017-11-07 15 views
0

私のファイルは、「file.txtを」のコンテンツ、はawkやsedコマンド

--- 
controller-name: RAID-1 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Good 
--- 
controller-name: RAID-2 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Bad 
... 

の下に、私はそれぞれの区切り文字として---を使用して行を抽出したい持っていると言いますコントローラ。コントローラ[0]のようなものは、第2コントローラの第1コントローラとコントローラ[1]の詳細を示します。

検索しようとしましたが、関連する回答が見つかりませんでした。

+0

最終予想される結果を投稿してください。 './script controller 0'を要求するとき、どのように出力を見るべきでしょうか?私は以下のように各コントローラについては、以下のような出力を抽出したい – RomanPerekhrest

答えて

0

予想される出力が表示されていないため、このソリューションはお客様のステートメントにのみ基づいて提供されています。

awk -vfield=2 -vRS="" '{num=split($0,array,"---");if(array[field]){print array[field]}}' Input_file 

だから、コードの上ご所望の出力を得ることができるのと同様に、あなたが任意のクエリを持っているなら、私に知らせて、field値という名前の変数を変更することができ、それを印刷しているINPUT_FILEの第二フィールド(一部)を印刷します同じです。いくつかの仮定に基づいて

awkを使用して

+0

は、 コントローラ名:RAID-1 ホストの電源は: 上のエラーを持っている:いいえ 情報-有効:はい コントローラ-健康:良い –

+0

@AbdulAnsari 、異なる出力ファイルまたは1つの単一出力ファイル? – RavinderSingh13

+0

実際には、私は印刷やその他の解析に使用できる配列変数として echo $ controller [0]、 echo $ controller [1] すみませんが、書式設定のために:) –

0

、2例は、これはあなたが編集を探している1、あなたの質問がない場合は、1でコントローラの設定1を検索し、明らかに私たちをブリーフィングするために使用することができ下回ります。

どちらか

# which will print and exit 
# search for controller-name, increment variable 
# print contents and exit 

awk -v controller=1 ' 
     f && /^---/{exit} 
     /^controller-name/{c++} 
     f=c==controller 
     ' infile 

それとも

# which will save inside array 
# used --- as row separator 
# whenever controller-name awk finds, that line is saved in array 
# in end block access it by a[0], a[1].... 

awk -v RS='---' ' 
      /controller-name:/{ 
       gsub(/^\n|\n$/,""); 
       a[c++]=$0 
      } 
      END{ 
       print a[0] 
      } 
      ' infile 

試験結果:

入力:

$ cat infile 
--- 
controller-name: RAID-1 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Good 
--- 
controller-name: RAID-2 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Bad 
... 

出力-1:

$ awk -v controller=1 'f && /^---/{exit}/^controller-name/{c++}f=c==controller' infile 
controller-name: RAID-1 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Good 

$ awk -v controller=2 'f && /^---/{exit}/^controller-name/{c++}f=c==controller' infile 
controller-name: RAID-2 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Bad 
... 

出力-2:

$ awk -v RS='---' '/controller-name:/{gsub(/^\n|\n$/,"");a[c++]=$0}END{print a[0]}' infile 
controller-name: RAID-1 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Good 

$ awk -v RS='---' '/controller-name:/{gsub(/^\n|\n$/,"");a[c++]=$0}END{print a[1]}' infile 
controller-name: RAID-2 
host-power: on 
has-error: No 
info-valid: Yes 
controller-health: Bad 
... 
+0

ありがとうございます。私はユースケースのためにそれをカスタマイズする必要があります。 –

関連する問題