IP의 처음 3개 옥텟을 기반으로 명명된 파일에서 awk 정보를 얻으려고 합니다. 이 파일에서 IP는 열 2 또는 열 4에 있을 수 있습니다. IP가 2열에 있으면 2열에 있는 내용을 인쇄한 다음 1열에 있는 내용을 인쇄하고 싶습니다. IP가 4열에 있으면 4열과 1열을 인쇄합니다. (서버 이름의 열 1).
다음은 모든 열을 인쇄하는 출력 예입니다.
awk /10.1.49/ /var/named/internal/Domain/abc.com
출력은 다음과 같습니다.
server01 IN A 10.1.49.29
server02 IN A 10.1.49.80
;globalname01.abc.com 10.1.49.60
;globalname02.abc.com 10.1.49.61
IP 열을 기준으로 정렬한 다음 IP와 서버 이름을 인쇄하고 싶습니다.
10.1.49.20 server01
10.1.49.60 globalname01.abc.com
10.1.49.61 globalname02.abc.com
10.1.49.80 server02
나는 파일을 사용하여 열 수를 가져온 {print NF}
다음 다시 읽어서 (필요한 경우) 정렬하는 방법을 알고 있습니다 .{print $4 $1}
{print $2 $1}
답변1
노력하다:
$ awk '$NF~/^10\.1\.49/ {sub(/;/, "", $1); print $NF,$1}' file | sort
10.1.49.29 server01
10.1.49.60 globalname01.abc.com
10.1.49.61 globalname02.abc.com
10.1.49.80 server02
어떻게 작동하나요?
$NF~/^10\.1\.49/ {..}
마지막 열이 로 시작하는 행이 선택됩니다
10.1.49
. 이러한 줄의 경우 중괄호로 묶인 명령을 실행합니다.sub(/;/, "", $1)
중괄호 안의 첫 번째 명령은 대체 명령입니다.
;
존재하는 경우 첫 번째 필드에서 제거됩니다.print $NF,$1
그러면 마지막 필드가 인쇄된 다음 (수정 가능) 첫 번째 필드가 인쇄됩니다.
sort
그러면 출력이 정렬됩니다. IP 주소를 정렬하는 방법에는 여러 가지가 있으며 다양한 정렬 옵션을 사용하면 원하는 결과를 얻는 데 도움이 될 수 있습니다.
답변2
awk '{ if ($1 ~ /;.*/) { print $2, substr($1, 2); } else { print $4, $1; } }' file | sort
산출:
10.1.49.29 server01
10.1.49.60 globalname01.abc.com
10.1.49.61 globalname02.abc.com
10.1.49.80 server02