이 정보가 반복되는 대용량 파일이 있습니다. 불행하게도 고정된 터미널을 사용하여 파일을 래핑합니다. 무엇이든 일치시켜 172
위 행으로 이동해야 합니다.
wsmith 623456256 6-meg
172.16.15.198 pppoe
출력은 다음과 같아야합니다.
wsmith 623456256 6-meg 172.16.15.198 pppoe
파일에 형식이 올바르지 않은 다른 줄이 있기 때문에 awk를 사용할 수 없으며 단순히 두 번째 줄을 이동합니다.
답변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