슬래시가 있는 awk 및 패턴

슬래시가 있는 awk 및 패턴

입력 데이터에는 다음 행이 포함됩니다.

Network:   10.1.0.0/24          00001010.00000001.00000000. 00000000
Network:   10.1.1.0/24          00001010.00000001.00000001. 00000000
Network:   10.1.2.0/24          00001010.00000001.00000010. 00000000
Network:   10.1.3.0/24          00001010.00000001.00000011. 00000000
Network:   10.1.4.0/24          00001010.00000001.00000100. 00000000
Network:   10.1.5.0/24          00001010.00000001.00000101. 00000000
Network:   10.1.6.0/24          00001010.00000001.00000110. 00000000
Network:   10.1.7.0/24          00001010.00000001.00000111. 00000000

$2 열의 출력을 얻기 위해 awk를 사용하고 싶습니다. 내가 시도한 것은 아무것도 반환하지 않습니다.

$ ipcalc 10.1.1.0/21 /24|gawk '$1~/^Network:.+\/24[[:space:]]+/{print $2}'

grep과 함께 정규식을 사용하면 제대로 작동합니다.

$ ipcalc 10.1.1.0/21 /24|grep -E "^Network:.+\/24[[:space:]]+"
Network:   10.1.0.0/24          00001010.00000001.00000000. 00000000
Network:   10.1.1.0/24          00001010.00000001.00000001. 00000000
Network:   10.1.2.0/24          00001010.00000001.00000010. 00000000
Network:   10.1.3.0/24          00001010.00000001.00000011. 00000000
Network:   10.1.4.0/24          00001010.00000001.00000100. 00000000
Network:   10.1.5.0/24          00001010.00000001.00000101. 00000000
Network:   10.1.6.0/24          00001010.00000001.00000110. 00000000
Network:   10.1.7.0/24          00001010.00000001.00000111. 00000000

awk(gawk) 다른 해결 방법이 필요합니까?

답변1

grep 명령을 에뮬레이트하려면 다음 $1~과 같이 변경 $0~하거나 제거하세요.

awk '/^Network:.+\/24[[:space:]]+/{print $2}'

또는 더 강력하고 이식 가능하게 만들려면 (POSIX awks뿐만 아니라 모든 awk에서 작동):

awk '($1 == "Network:") && ($2 ~ "/24$"){print $2}'

$1코드의 문제는 전체 표현식을 테스트 하지만 $1첫 번째 필드인 Network:.

답변2

보여준 예를 사용하여 다음 GNU grep솔루션을 시도해 보십시오. 표시된 예제만 사용하여 작성하고 테스트했습니다.

grep -oP '^Network:\s+\K([0-9]{1,3}\.){3}[0-9]{1,3}\/24'  Input_file

관련 정보