文字列を一致させ、1行を前の行に移動します。

文字列を一致させ、1行を前の行に移動します。

この情報が繰り返される大容量ファイルがあります。残念ながら、固定端末を使用してファイルをラップします。何でも一致させて172上の行に移動する必要があります。

wsmith 623456256 6-meg
   172.16.15.198 pppoe

出力は次のようになります。

wsmith 623456256 6-meg  172.16.15.198 pppoe

ファイルにフォーマットが正しくない他の行があるため、awkは使用できず、単に2行目を移動します。

答え1

そしてsed

sed '/^[[:blank:]]*172/ !{ N;s/\n[[:blank:]]*/ /; };' infile

答え2

edエディタを使用すると、このコマンドはg/172/-1,.j(サブ)文字列を含むすべての行を前の行に172関連付けます。

以下は,pバッファ全体を標準出力として出力し(Q保存せずに終了します)。

$ cat file
wsmith 623456256 6-meg
   172.16.15.198 pppoe
$ printf '%s\n' 'g/172/-1,.j' ',p' 'Q' | ed -s file
wsmith 623456256 6-meg   172.16.15.198 pppoe

より具体的に一致するには、オプションのスペースおよび/またはタブと文字列で始まる行のみを一致させます172.

$ printf '%s\n' 'g/^[[:blank:]]*172\./-1,.j' ',p' 'Q' | ed -s file
wsmith 623456256 6-meg   172.16.15.198 pppoe

新しいファイルに保存するには、結果をリダイレクトしてください。内部編集の場合,pQコマンドを単一のwqコマンドに置き換えます。

答え3

これにより、必要な操作が実行されます。

文書:

wsmith 623456256 6-meg
 172.16.15.198 pppoe
wfwe fw efwe fw ef
fkp e
kswsmith 623456256 6-meg
  172.16.15.198 pppoe
wsmith 623456256 6-meg
  172.16.15.198 pppoe
ef
efwef w ef w efwef
wewsmith 623456256 6-meg
 172.16.15.198 pppoe
efwef
uiwsmith 623456256 6-meg
172.16.15.198 pppoe
awk 'BEGIN{set=0} NR>1 && /^ *172/{ print line,$0; set=1; next }
 NR>1 && !/^ *172/ && set==0{print line} {line=$0; set=0}' file

出力:

wsmith 623456256 6-meg  172.16.15.198 pppoe
wfwe fw efwe fw ef
fkp e 
kswsmith 623456256 6-meg   172.16.15.198 pppoe
wsmith 623456256 6-meg   172.16.15.198 pppoe
ef
efwef w ef w efwef
wewsmith 623456256 6-meg  172.16.15.198 pppoe
efwef
uiwsmith 623456256 6-meg 172.16.15.198 pppoe

関連情報