
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