AWK 를 사용 하여 선을 빼는 방법을 알아 내려고합니다 . 예를 들어, 입력 파일이 다음과 같다고 가정하십시오.
30
20
결과는 다음과 같습니다.
10
이제 테스트로 “사용 된”메모리 열을 계산하려고합니다.
$ cat /proc/meminfo
그래서 지금 나는 이것을 썼습니다 :
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
-- Here comes the calculation using AWK
나는 다음을 시도했다.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | awk '{$0-s}{s=$0} END {print s}'
그러나 이것은 단지 마지막 데이터 행을 제공합니다.
작동하는 솔루션을 찾았지만 가장 적합한 솔루션은 아닌 것 같습니다. 모든 코딩 경험에 따르면 행의 양을 하드 코딩하는 것이 끔찍하다는 것을 알 수 있습니다.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | awk 'NR == 1{s=$0} NR == 2 {s=s-$0} END {print s}'
답변
또한 사용하여이 작업을 수행 할 수 있습니다 awk
, paste
그리고 bc
. 나는이 접근법이 기억하기 쉽다는 것을 알았습니다. 구문은 awk
항상 확인하기 위해 물건을 찾아야합니다.
참고 : 이 방법은 여러 줄의 출력과 경쟁하여 1, 2, 3, 4 등의 숫자를 빼는 이점이 있습니다.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}' | paste -sd- - | bc
7513404
세부
위의 방법은 awk
빼려는 숫자가 포함 된 열을 선택하는 데 사용 됩니다.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'
7969084
408432
그런 다음 paste
이 두 값을 결합하고 그 사이에 빼기 부호를 추가하는 데 사용합니다.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- -
7969084-346660
이것을 전달 bc
하면 계산이 수행됩니다.
$ grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk '{print $2}'| paste -sd- - | bc
7513404
답변
순수한 awk 솔루션, 중복 cat 또는 grep 명령이 없습니다.
awk '/MemTotal/ {TOT=$2} /MemFree/ {FREE=$2} END {printf("%d kB Used\n", TOT-FREE)}' /proc/meminfo
awk_FTW가 나를 이길 수 있지만 출력 형식을 지정하는 것이 좋을 수 있습니다.
답변
이 시도:
grep -P 'MemTotal|MemFree' /proc/meminfo | \
awk 'NR==1{s=$2;next}{s-=$2}END{print s}'