두 줄을 하나로 병합하고 두 줄에서 선택한 단어를 선택하세요.

두 줄을 하나로 병합하고 두 줄에서 선택한 단어를 선택하세요.

file1을 한 줄에 세 단어로 변환해야 합니다. 여기서 첫 번째 단어는 줄 시작 부분의 두 번째 단어입니다."로봇"두 번째 단어는 줄의 시작 부분에 있는 두 번째 단어입니다.'1)'마지막 세 번째 단어는 다음 줄에서 시작하는 네 번째 단어입니다.'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 

첫 번째 행을 제어해야 합니다."로봇"두 번째는 다음으로 시작합니다.'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임의의 줄에서 두 번째 단어를 추출합니다.

두 번째 부분은 모든 줄의 첫 번째 입력 필드를 1)가장 최근 ROBO줄의 단어로 바꾸고 수정된 레코드를 인쇄하기 전에 세 번째 입력 필드를 지웁니다.

두 번째 입력 예시 세트의 경우 이는 다음과 같습니다.

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

관련 정보