2017-11-21 5 views
0

awk, bash로 한 파일에 임계 값을 인쇄해야합니다.다른 열의 값에 따라 새 열에 특정 값을 인쇄하십시오.

file.txt를

내가 조건 및 인쇄 thresold을 둘 필요가
device_1 200.33 1000.50 
device_2 12.00 2000.11 
device_3 400.22 6000.32 
device_4 34.11 2000.11 

(여기 내 노력한다) :

cat file.txt | awk '{if ($2 < 50); print $1, $2, $3, $4="97%" };elseif { ($2 > 50); print $1,$2,$3, $4="80%";}' 

"$ 2 < (50), 인쇄 97 % IF, else print 80 % ": 예상 출력

device_1 200.33 1000.50 80% 
device_2 12.00 2000.11 97% 
device_3 400.22 6000.32 80% 
device_4 34.11 2000.11 97% 

$ 2 열에 올바른 조건을 지정하지 않습니다. 은 if 문의 적절한 구성에 대한

+1

세미 콜론으로 if를 즉시 끝냅니다. 'if (조건) {do stuff} else if (조건) {do stuff} else {do ​​stuff}'이어야합니다. – 123

+0

및 약 50? 그것은 고려되지 않습니다! – m47730

+0

은 $ 2 열보다 낮은 값이어야합니다. $ 2 열의 값이 50보다 작 으면 해당 조건을 기반으로 경보를 설정할 수 있습니다. – Slashlinux

답변

3

123 is right :

당신은 즉시 종료 세미 콜론 경우. if(condition){do stuff}else if (condition){do stuff} else {do stuff}이어야합니다. 아직

, 당신은 단지 하나 개의 값을 인쇄하는 것 또는 다른 문맥에 따라 때문에, 당신이 직접 삼항 연산자 갈 수 있습니다 말 :

awk '{print $1, $2, $3, ($2 < 50 ? "97%" : "80%")}' file 

출력한다 :

device_1 200.33 1000.50 80% 
device_2 12.00 2000.11 97% 
device_3 400.22 6000.32 80% 
device_4 34.11 2000.11 97% 

print $1, $2, $3, ($2 < 50 ? "97%" : "80%")은 print $ 1, $ 2 및 $ 3을 말합니다. 다른 필드는 $ 2 < 50 인 경우 "97 %"또는 그렇지 않으면 "80 %"로 구성됩니다.

+0

여기서 설명하신 내용을 이해할 수 없습니다. 다시 말하지만 $ 2 또는 400.22 <값 50 인 경우 "매우 낮은 공간"을, 그렇지 않은 경우 "양호한 공간"을 인쇄하십시오. 두 번째 열의 값에 따르면 인쇄물을 설정할 수 있습니다. 그 값이 "나 한테 설정 한 값"보다 낮 으면 – Slashlinux

+0

@Slashlinux 당신의 질문에 설명되어 있지 않은 것을 모두 인쇄하십시오. 예상 한 결과물을 보여주기 위해 편집하면, 너무 광범위하다는 것을 알 수 있습니다. – fedorqui

+0

awk의 기능을 악용 ("악용")하고 이것을 $ 4 = ($ 2 <50)의 awk로 단순화 할 수 있습니까? "80 %": "97 %" 'OFS = \\ t input'. –

관련 문제