Bash 解析命令的输出并存储在变量中

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命令的输出,并使用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          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美元怎么样?还有,你的代码中的“文件”是什么?我在我的回答中添加了一个解释。