如何使用awk进行过滤(perl自动化)

时间:2018-02-09 11:23:59

标签: linux perl awk

这是我的txt文件

type=0
vcpu_count=10
maste=0
h=0
p=0
memory=23.59
num=2

我想获取vcpu_count和内存值,并通过perl将其存储在某个数组中(自动化脚本)。

awk -F'=' '/vcpu_count/{printf "\n",$1}' .vmConfig.txt

我正在使用此命令来测试终端。但我得到一个空行。我该怎么做。我需要获取这两个值并检查条件

3 个答案:

答案 0 :(得分:3)

如果您仍在使用Perl,也可以使用Perl。

my %array;
open ($config, "<", ".vmConfig.txt") or die "$0: Could not open .vmConfig.txt: $!\n";
while (<$config>) {
    next unless /^\s*(vcpu_count|memory)\s*=\s*(.*?)\s*\n/;
    $array{$1} = $2;
}
close($config);

如果您不希望结果是关联数组(也就是哈希),那么重构应该相对容易。

答案 1 :(得分:1)

关注awk可能对您有帮助。

解决方案1:

awk '/vcpu_count/{print;next} /memory/{print}'  Input_file

输出如下:

vcpu_count=10
memory=23.59

解决方案第二: 如果您想使用printf在一行上打印值,那么以下内容可能对您有帮助:

awk '/vcpu_count/{val=$0;next}  /memory/{printf("%s AND %s\n",val,$0)}'  Input_file

输出如下:

vcpu_count=10 AND memory=23.59

答案 2 :(得分:1)

使用awk -F'=' '/vcpu_count/{printf "\n",$1}' .vmConfig.txt时会出现一些错误。首先,正如您所发现的那样,printf "\n"只会打印一个新行。您需要添加格式说明符 - 类似printf "%s\n", $2的内容将字段2视为字符串并将其添加到打印的字符串中。在命令行中检出man printf将解释更多,。

其次,当我在那里更改时,当您使用$1时,您使用的是第一个字段,在这种情况下是关键字(而$0是整行。)

Triplees解决方案可能是最合适的,但是如果有特殊原因要在perl之前启动awk来执行此操作,则以下内容可能有所帮助。

正如您所做的那样,它会在=上分割,但会以csv输出,您可以根据需要进行更改。即使输入行不总是以相同的顺序,也会在单行上以可预测的顺序输出

awk 'BEGIN {
        FS="=";
        OFS=","  # tabs, etc if wanted, delete for spaces.
    }
    /vcpu_count/  {cpu=$2} 
    /memory/      {mem=$2} 
    END           { print cpu, mem }'

这给出了

10,23.59