我需要解析 mmls 命令的输出,并使用BASH脚本将多个值存储在变量中。
具体地说,我需要存储:扇区大小(在下面的示例中为512)和起始值(在示例中为0,0,63,224910,240975)下面)。由于第二组值表示分区,因此捕获的值数可能会有所不同。
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
答案 0 :(得分:1)
这是一个开始:
$ awk '/^Units/{print $4+0} /^[0-9]/{print $3+0}' file
512
0
0
63
224910
240975
尝试自己解决其余问题,如果您有任何疑问,请告诉我们。
说明:file
是一个包含示例输入的文件。如果输入来自某个命令的输出而不是存储在文件中,则可以用awk '{script}' file
替换command | awk '{script}'
。
^
是start of string
的通用正则表达式元字符,而awk中的/.../
表示“查找此正则表达式”。因此,上面的代码正在查找以显示的文本(即Units
或数字)开头的行,然后在向其添加零以除去任何尾随的非数字或前导零之后打印第4或第3个空格分隔的字段。 man awk
。
答案 1 :(得分:0)
首先需要一点awk
。
values=( $(mmls /mnt/E01Mnt/RAW/ewf1 | awk '
/^Units are in/{match($4,/^[[:digit:]]+/,ss); print ss[0]}
NR>6{print $4}'
) )
现在您有了一个values数组,其中包含扇区大小(第一个元素)和起始值(后续元素)。我们可以进行一些数组操作来分离单个元素。
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.
注意:需要GNU awk。