![두 줄을 하나로 병합하고 두 줄에서 선택한 단어를 선택하세요.](https://linux55.com/image/117913/%EB%91%90%20%EC%A4%84%EC%9D%84%20%ED%95%98%EB%82%98%EB%A1%9C%20%EB%B3%91%ED%95%A9%ED%95%98%EA%B3%A0%20%EB%91%90%20%EC%A4%84%EC%97%90%EC%84%9C%20%EC%84%A0%ED%83%9D%ED%95%9C%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20%EC%84%A0%ED%83%9D%ED%95%98%EC%84%B8%EC%9A%94..png)
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