この情報が繰り返される大容量ファイルがあります。残念ながら、固定端末を使用してファイルをラップします。何でも一致させて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
新しいファイルに保存するには、結果をリダイレクトしてください。内部編集の場合,p
とQ
コマンドを単一の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