这是我的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
我正在使用此命令来测试终端。但我得到一个空行。我该怎么做。我需要获取这两个值并检查条件
答案 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