1

情報を持っているマシンの IP アドレスのように名前が付けられ、.dgt拡張子が付いた約 600 個のファイルがあります。これらのファイルでパラメーターを検索し、特定のパラメーターが正しい場合は、それらのファイルから 2 行を抽出しようとしています。私は aix コンソールを使用しています。検索の結果sed、ここにコマンドが見つかりました。私の検索例を紹介します。

sed -n -e '/XP/,$p' 181* > machines1

sed -e '/XP/,$d' 181* > machines1

より具体的に言うと、ディレクトリにはすべてのエンタープライズ マシンのファイル リストがあり、次のようになります。

181xxxxxxxxx.dgt
181xxxxxxxxx.dgt
181xxxxxxxxx.dgt
181xxxxxxxxx.dgt

また、次のような情報が含まれています。

MachineName= M125EEE
...
...
...
CurrentIP=XXX.XXX.XXX.XXX
...
...
OS=XP
...
...
...

XPがインストールされているすべてのマシンのリストを取得しようとしているので、OS行とMachineName行を抽出して、このようなファイルを取得できるようにしています...

MachineName= M125EEE
OS=XP
MachineName= M125EEE
OS=XP
MachineName= M125EEF
OS=XP
MachineName= M125EEG
OS=XP
4

3 に答える 3

2

これを試して:

awk '
BEGIN{ FS=OFS="=" }
{ map[FILENAME,$1] = $2 }
END {
   for (file in ARGV) {
      if ( map[file,"OS"] == "XP" ) {
         tag="MachineName"; print tag, map[file,tag]
         tag="OS";          print tag, map[file,tag]
         tag="CurrentIP";   print tag, map[file,tag]
      }
   }
}
' 181*

シンプルで明白な微調整を行って、好きな値を出力してください...

于 2012-11-21T16:41:46.293 に答える
1

編集:

これは要求されたことを行いますが、最初のバージョンよりも単純 (短い) です。

sed -ne '/^MachineName=/h;/^OS=XP/{x;G;p}' 181*dgt >machines

次の最初の回答と同じようにします。

最初の答え

これは仕事をします:

sed -ne '/^MachineName=/{h};/^OS=/{/=XP/!d;x;G;p;d;h}' 181*.dgt >machines
cat machines
MachineName= M125EEE
OS=XP
MachineName= M125EEE
OS=XP
MachineName= M125EEF
OS=XP
MachineName= M125EEG
OS=XP

OS=XPただし、これが一致する唯一の文字列であるため、毎回印刷する必要がない場合は、それらを除外できます。

sed -ne '/^MachineName=/{h};/^OS=XP$/{g;p}' 181*.dgt >machines
cat machines
MachineName= M125EEE
MachineName= M125EEE
MachineName= M125EEF
MachineName= M125EEG

マシン名だけが必要でMachineName=、必要がない場合は、次のことができます。

sed -ne '/^MachineName=/{s/^.*= *//;h};/^OS=XP$/{g;p}' 181*.dgt >machines
cat machines
M125EEE
M125EEE
M125EEF
M125EEG
于 2012-11-21T16:19:24.233 に答える
1

他のいくつかのソリューションほどランタイム効率は高くありませんが、ファイルの数が非常に少ない場合は、次のわかりやすいソリューションが適切な場合があります。

grep -h MachineName $(grep -l OS=XP 181*)

grep -l は、一致するファイルの名前のみを出力することを意味します。次に、これらのファイル名をファイルのリストとして使用して、MachineName 行を検索します (-h はファイル名を抑制することを意味します)。

于 2012-11-21T17:03:00.707 に答える