2行を1つにマージし、2行から選択した単語を選択します。

2行を1つにマージし、2行から選択した単語を選択します。

file1を1行に3つの単語に変換する必要があります。ここで、最初の単語は行の先頭の2番目の単語です。「ロボット」2番目の単語は行の先頭にある2番目の単語です。'1)'最後の3番目の単語は、次の行から始まる4番目の単語です。'1)'。以下の例を参照してください...

$cat file1
ROBO lab1 - Topology:
1) 10.195.41.1          10.195.41.255        comment1         
ROBO lab2 - Topology:
1) 10.95.4.1            10.95.4.254          comment2 

到着する:

lab1 10.195.41.1 comment1
lab2 10.95.4.1 comment2

私は次のような結果を得ました。

sed 'N;s/\n/ /' file1| awk '{ if ($6 ~ /^10\./) print $2 " " $6}'

ただし、次の場合に競合が発生します。

ROBO lab1 - Topology:
ROBO lab1 - Topology:
1) 10.195.41.1          10.195.41.255        comment1         
ROBO lab2 - Topology:
1) 10.95.4.1 

最初の行を制御する必要があります。「ロボット」2番目は次から始まります。'1)'そうでない場合は、正しいペアが見つかるまでファイルを下に移動してください。

答え1

$ awk '/^ROBO/ { n = $2 } /^1\)/ { $1 = n; $3 = ""; print }' file1
lab1  10.195.41.1  comment1
lab2  10.95.4.1  comment2

これは期待どおりに機能しますが、コメントの連続するスペースを減らします。

最初の部分は、ROBO任意の行から2番目の単語を抽出します。

2番目の部分は、すべての行の最初の入力フィールドを最新の行の1)単語ROBOに置き換え、変更されたレコードを印刷する前に3番目の入力フィールドを消去します。

2番目の入力例のセットの場合、これは次のようになります。

lab1 10.195.41.1  comment1
lab2 10.95.4.1

答え2

簡単にアッ:

"...file1を次のように変換します。サム言葉一行一行…」

awk '/^ROBO/{ printf "%s ",$2  }/^1\)/{ printf "%s %s\n",$2,$4 }' file1

出力:

lab1 10.195.41.1 comment1
lab2 10.95.4.1 comment2

関連情報