라인 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 쿼리를 구성하는 것이 더 나을 수 있습니다. 데이터베이스에서 작업을 수행 할 수있을 때 쿼리 결과를 직접 수정하지 마십시오.