awkを使用して行を一致させ、マージし、Solarisを使用して印刷する

awkを使用して行を一致させ、マージし、Solarisを使用して印刷する

パターンを合わせたいです。アッSolaris システムの場合。

$ luxadm probe 
 No Network Array enclosures found in /dev/es

 Found Fibre Channel device(s): 
 Node WWN:2000000c50f1c8da Device Type:Disk device 
 Logical Path:/dev/rdsk/c1t1d0s2 
 Node WWN:2000000c50f1d9c9 Device Type:Disk device 
 Logical Path:/dev/rdsk/c1t0d0s2

注 - 使用しようとするとアッ、最後の行から1行をマージするだけです。

$ luxadm probe |awk '/Node/{n=$2}/Logical/{l=$2} END {print n,l}' 
 WWN:2000000c50f1d9c9 Path:/dev/rdsk/c1t0d0s2

予想される出力は次のとおりです。

WWN:2000000c50f1d9c9 Path:/dev/rdsk/c1t0d0s2
WWN:2000000c50f1c8da Path:/dev/rdsk/c1t1d0s2 

ベストアンサー1

まだ言及されていない短い答えawk

awk '/Node/{n=$2; getline; print n " "$2; next}' filename
  • /Node/#パターンノードを見つけて、2番目のフィールドをn変数に保存します。n=$2
  • getline#次の行(Logical行が始まる場所)に移動して変数に保存されている内容を印刷し、次の行のn2番目のフィールドを印刷します。
  • next#現在のレコードの処理を中止し、次のレコードに移動します。

おすすめ記事