Bash 解析命令的输出并存储在变量中
我需要解析mmls命令的输出,并使用BASH脚本将多个值存储在变量中 具体来说,我需要存储:扇区大小(以下示例中为512)和起始值(以下示例中为0,0,63224910240975)。由于第二组值表示分区,因此捕获的值的数量可能会有所不同Bash 解析命令的输出并存储在变量中,bash,scripting,Bash,Scripting,我需要解析mmls命令的输出,并使用BASH脚本将多个值存储在变量中 具体来说,我需要存储:扇区大小(以下示例中为512)和起始值(以下示例中为0,0,63224910240975)。由于第二组值表示分区,因此捕获的值的数量可能会有所不同 mmls /mnt/E01Mnt/RAW/ewf1 DOS Partition Table Offset Sector: 0 Units are in 512-byte sectors Slot Start End
mmls /mnt/E01Mnt/RAW/ewf1
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors
Slot Start End Length Description
000: Meta 0000000000 0000000000 0000000001 Primary Table (#0)
001: ------- 0000000000 0000000062 0000000063 Unallocated
002: 000:000 0000000063 0000224909 0000224847 NTFS / exFAT (0x07)
003: 000:001 0000224910 0000240974 0000016065 DOS FAT12 (0x01)
004: ------- 0000240975 0000250878 0000009904 Unallocated
首先,您需要一点
awk
values=( $(mmls /mnt/E01Mnt/RAW/ewf1 | awk '
/^Units are in/{match($4,/^[[:digit:]]+/,ss); print ss[0]}
NR>6{print $4}'
) )
现在您有了一个值数组,它包含扇区大小(第一个元素)和起始值(后续元素)。我们可以做一些数组操作来分离单个元素
secsize=${values[0]} # size of sector
declare -a sv # sv for start values
for((i=1;i<${#values[@]};i++))
do
sv+=( ${values[i]} )
done
echo "${sv[@]}" # print start values
unset values # You don't need values anymore.
secsize=${values[0]}#扇区大小
声明-a sv#sv作为起始值
对于((i=1;i以下是一个开始:
$ awk '/^Units/{print $4+0} /^[0-9]/{print $3+0}' file
512
0
0
63
224910
240975
试着自己解决其余的问题,如果有问题,请告诉我们
说明:file
是一个包含示例输入的文件。如果输入来自某个命令的输出,而不是存储在文件中,则可以将awk'{script}'文件
替换为command | awk'{script}'
^
是字符串开头的通用regexp元字符,而awk中的/…/
表示“查找此regexp”。因此,上面的代码是查找以所示文本开头的行(即单位或数字)然后在向字段中添加零后打印第四个或第三个空格分隔的字段,以删除任何尾随的非数字或前导零。man awk
欢迎使用SO。堆栈溢出是专业和热情的程序员的问答页面。在问题中添加您自己的代码。您至少需要显示r的数量esearch你自己解决了这个问题。嗨,谢谢你的回答。你介意提供一个关于你在这里做什么的基本解释吗?“^”是用来做什么的?4美元怎么样?还有,你的代码中的“文件”是什么?我在我的回答中添加了一个解释。