从AWK读取变量

时间:2014-08-21 18:21:26

标签: linux shell variables unix awk

我正在尝试通过此命令获取内存信息:

#!/bin/bash
set -x
cat /proc/meminfo | grep "MemFree" | tail -n 1 | awk '{ print $2 $4 }' | read numA numB
echo $numA

我收到了这个

+ awk '{ print $2 $4 }'
+ read numA numB
+ tail -n 1
+ grep MemFree
+ cat /proc/meminfo
+ echo

我尝试将这些数据读取到变量是不成功的。我的问题是我怎么能读到这些变量?我想读一下有多少内存是免费的:90841312 KB

此致

4 个答案:

答案 0 :(得分:4)

将输出直接分配给您的变量:

var=$(cat /proc/meminfo | grep "MemFree" | tail -n 1 | awk '{ print $2 $4 }')
echo $var

答案 1 :(得分:3)

使用BASH可以将复杂命令减少到:

read -r _ numA _ numB < <(grep MemFree /proc/meminfo | tail -n 1)

答案 2 :(得分:0)

顺便说一句:如果你从awk打印多个vales,你需要一个分隔符:

$ echo "11 22" | awk '{print $1 }'
11
$ echo "11 22" | awk '{print $2}'
22
$ echo "11 22" | awk '{print $1 $2}'
1122
 ^ note no space there...

您需要逗号:

$ echo "11 22" | awk '{print $1,$2}'
11 22

或身体:

$ echo "11 22" | awk '{print $1"    "$2}'
11    22

因为没有分离,命令替换不会读取你想要的内容:

$ read -r f1 f2 <<< $(echo "11 22" | awk '{print $1 $2}')
$ echo $f1
1122
echo $f2

# f1 got two fields and nada for f2

答案 3 :(得分:0)

arr=( $(awk '/MemFree/{split($0,a)} END{print a[2], a[4]}' /proc/meminfo) )
echo "${arr[0]}"
echo "${arr[1]}"