라인 1과 2를 나누는 AWK
Sep 09 2020
grep 및 awk 후 다음 출력이 있습니다.
[root@nalba ~]# mysql -e "show global status like '%innodb_buffer_pool_read%';" | grep s | awk '{print $2}'
835231
2893
835231/2893을 나누고 싶습니다.
그러나이 숫자는 명령이 실행될 때마다 변경되므로 awk에게 줄 1과 2를 나누거나 어떻게 든 변수에 저장하는 방법을 알려 주면됩니다.
대부분의 온라인 자습서는 열로 나누는 것만 보여줍니다. (awk '{print $ 1 / $ 2)하지만이 경우에는 작동하지 않습니다.
들러 주셔서 감사합니다!
답변
1 Cyrus Sep 09 2020 at 02:31
명령에 추가하십시오.
| awk '{a=$1; getline; b=$1; print a/b}'
0으로 나누기 오류를 방지하기 위해 업데이트 :
| awk '{a=$1; getline; b=$1; if(b==0){print "error"} else {print a/b}}'
산출:
288.708
2 EdMorton Sep 09 2020 at 03:35
다음으로 교체 | grep s | awk '{print $2}':
| awk '/s/{v[++c]=$2} c==2{print (v[2] ? v[1] / v[2] : "NaN"); exit}'
1 ToddA.Jacobs Sep 09 2020 at 02:22
배열에 값 저장; 끝 블록으로 나누기
항상 정확히 두 개의 값이 있다는 것을 알고 있거나 처음 두 개의 일치 항목에만 관심이 있다면 연관 배열에 값을 저장하고 마지막에 나눗셈을 수행 할 수 있습니다. 예를 들면 :
test_data="foo 835231\nbar 2893"
echo -e "$test_data" | awk '{ values[NR] = $2 }; END { print values[1] / values[2] }'
이것은 288.708.
어쨌든 데이터베이스를 쿼리하는 경우 데이터베이스에 분할을 수행하도록 요청하는 SQL 쿼리를 구성하는 것이 더 나을 수 있습니다. 데이터베이스에서 작업을 수행 할 수있을 때 쿼리 결과를 직접 수정하지 마십시오.