2014-05-12 3 views
0

이 awk 명령을 더 간단하게 만들려면?하는 방법 (. 즉, 두 번 <em>AWK</em>를 사용하지 않는)이 명령은 더 간단하게 만들 수있는 방법이 있나요

ip addr show dev eth0 | awk '$1=="inet" {print $2}' | cut -f1 -d '/' 

:

또한, 여기 명령을 잘라 사용하지 않도록하는 방법은 무엇입니까?

감사합니다.

+1

이것은 내 의견으로는 정말로 두 가지 질문입니다. 또한 샘플 입력 및 예상 출력을 질문에 추가하는 것이 좋습니다. 예를 들어'/ proc/cpuinfo /'의 내용,'ip addr show dev eth0'의 출력과 추출하려는 부분. –

+1

입력 샘플과 원하는 출력을 포함 시키려면 항상 도움이됩니다. –

+1

'awk '/ cpu MHz/{print int ($ 4)}'/ proc/cpuinfo'? 'ip addr show dev eth0 | awk '/ inet/{print gensub ("/.*", "", "", $ 2)}'? – twalberg

답변

1

먼저 하나는 다음과 같이이다 :

cpu MHz   : 800.000 
cpu MHz   : 800.000 
cpu MHz   : 800.000 
cpu MHz   : 800.000 

그리고 당신은 단지 첫 번째 줄의 숫자의 정수 부분은, 당신이 할 수 원하는 :

awk '/cpu MHz/ {print $4}' < /proc/cpuinfo | awk -F'.' 'NR==1 {print $1}' 

는이 같은 문자열을 고려 :

$ awk -F"[ .]" '/cpu MHz/ {print $(NF-1); exit}' /proc/cpuinfo 
800 

즉, 줄을 일치 시키려면 마지막에서 두 번째 필드를 인쇄 한 다음 끝내고 여분의 p rocessing.

의견에 따라 다른 명령에서 두 번째로 일치하는 줄을 얻고 싶을 수도 있습니다. 이를 위해 다음을 할 수 있습니다.

awk -F"[ .]" '/cpu MHz/ {if (f) {print $(NF-1); exit}; f=1}' /proc/cpuinfo 

플래그를 사용하면됩니다. 첫 번째 경기에서는 깃발이 활성화되므로 다음에 깃발이 출력되고 종료됩니다.


두 번째는 다음과 같이이다 :

$ ip addr show dev eth0 | awk '$1=="inet" {split($2, a, "/"); print a[1]}' 
192.168.123.123 
+0

감사합니다. 그러나 두 번째 라인을 위해 또 다른 것을 만드는 방법은 무엇입니까? 내 _cpuinfo_에이 있습니다. cpu MHz : 1000.000 cpu MHz : 1000.000 – daimonion

+0

@ user3628725 내 업데이트 참조. 또한 내 솔루션이 요구 사항과 일치하지 않는 경우 현재 샘플 입력으로 업데이트하여 작동하지 않는 부분을 추측 할 수 있습니다. – fedorqui

+0

감사합니다. _ip addr show_와 함께 작동합니다. 첫 번째 질문에 관해서는, 첫 번째와 두 번째 줄을 모두 추출해야합니다 (두 개의 별도 명령에서). 두 번째 줄과 일치하도록 제안한 명령을 어떻게 적용 할 수 있습니까? – daimonion

1

경우] : 당신이 할 수있는 일

ip addr show dev eth0 | awk '$1=="inet" {print $2}' | cut -f1 -d '/' 

/에 따라 조각의 두 번째 필드를 분할하고 인쇄 할 첫 번째입니다 목표는 인터페이스에 IP 주소를 표시하는 것이므로 좋은 옵션은 아닙니다.

ip addr show dev eth0 

인터페이스에 다른 이름이 있거나 둘 이상의 인터페이스가 있고 인터넷에 연결된 인터페이스가 eth1 인 경우 어떻게됩니까? 이 대신

소개 :

ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}' 
192.168.0.33 

이 변수에 저장하려면 : 그것은 공공 IP에 도착하는 방법을 볼 수 ip route 명령을 사용하여

IP=$(ip route get 8.8.8.8 | awk '/8.8.8.8/ {print $NF}') 

, 그래서 어떤 이름을 올바른 작동합니다 인터페이스의.

+0

고맙습니다. @Jotne, 그건 나에게 중요하지 않습니다. (단 하나의 인터페이스 만 가지고 있습니다.)하지만 사용하겠습니다. 더 간단합니다. – daimonion

+0

@daimonion 여러분 환영합니다. 서버를'VPS' 팜으로 옮기면, 하나의 if는 다음과 같이 명명 될 수 있습니다 :'venet0' – Jotne

+0

+1; 일치를 위해'awk' 프로그램에서 입력 된 IP 주소를 반복하는 것이 좋을지,'ip route get 8.8.8.8 | awk '{print $ NF; exit} ''도 작동합니까? – mklement0