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