Bash 当特定行等于某个值时,awk返回另一行

Bash 当特定行等于某个值时,awk返回另一行,bash,awk,Bash,Awk,我正在尝试获取我的一个硬件USB许可证密钥的UUID。 我发现获取UUID的唯一方法是使用virtualbox命令“vboxmanagelist usbhost” 此命令返回以下输出: UUID: e41fb948-83af-40a8-85a0-b0fcd7afd13f VendorId: 0x0529 (0529) ProductId: 0x0001 (0001) Revision: 2.22 (0222)

我正在尝试获取我的一个硬件USB许可证密钥的UUID。 我发现获取UUID的唯一方法是使用virtualbox命令“vboxmanagelist usbhost”

此命令返回以下输出:

UUID:               e41fb948-83af-40a8-85a0-b0fcd7afd13f
VendorId:           0x0529 (0529)
ProductId:          0x0001 (0001)
Revision:           2.22 (0222)
Port:               3
USB version/speed:  2/1
Manufacturer:       AKS
Product:            HASP HL 2.16
Address:            sysfs:/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4//device:/dev/vboxusb/001/004
Current State:      Available

UUID:               7d8a98ab-e20c-4111-a873-6ce519729ed8
VendorId:           0x0529 (0529)
ProductId:          0x0001 (0001)
Revision:           3.37 (0337)
Port:               2
USB version/speed:  2/1
Manufacturer:       AKS
Product:            HASP HL 3.25
Address:            sysfs:/sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.3//device:/dev/vboxusb/001/003
Current State:      Captured
我想做的是创建一个bash函数,它接受一个表示Product:string(HASP HL 3.25等)的参数,并在第一行返回UUID

我可以从脚本中获得命令的输出,但是当产品对应于字符串时,我有点不知道如何使用awk来获取UUID

UUIDS=`sudo -u syderal VBoxManage list usbhost | awk '/$1/ { print $2 }'`

我可以使用awk很容易地找到Product:或UUID:行,但如何才能在Product:行等于字符串时返回UUID行?

您可以使用类似于:

sudo -u syderal VBoxManage list usbhost |
 awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
                                /^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量
product
(请参见我们需要
-v
将外壳值作为变量传递到
awk
)。然后,它将UUID存储在变量
UUID
中,以便以后使用。每当找到
UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到
Product:
文本并且该行包含给定的
Product
变量时

试验 如果我将您的输出存储在文件
a

$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8

您可以使用以下内容:

sudo -u syderal VBoxManage list usbhost |
 awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
                                /^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量
product
(请参见我们需要
-v
将外壳值作为变量传递到
awk
)。然后,它将UUID存储在变量
UUID
中,以便以后使用。每当找到
UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到
Product:
文本并且该行包含给定的
Product
变量时

试验 如果我将您的输出存储在文件
a

$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8

您可以使用以下内容:

sudo -u syderal VBoxManage list usbhost |
 awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
                                /^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量
product
(请参见我们需要
-v
将外壳值作为变量传递到
awk
)。然后,它将UUID存储在变量
UUID
中,以便以后使用。每当找到
UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到
Product:
文本并且该行包含给定的
Product
变量时

试验 如果我将您的输出存储在文件
a

$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8

您可以使用以下内容:

sudo -u syderal VBoxManage list usbhost |
 awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2}
                                /^Product:/ && $0 ~ product {print uuid}'
它将产品值作为变量
product
(请参见我们需要
-v
将外壳值作为变量传递到
awk
)。然后,它将UUID存储在变量
UUID
中,以便以后使用。每当找到
UUID:
时,它就会不断变化,因此在给定的段落中,您总是有正确的值。最后,当找到
Product:
文本并且该行包含给定的
Product
变量时

试验 如果我将您的输出存储在文件
a

$ awk -v product="HASP HL 3.25" '/^UUID:/ {uuid=$2} /^Product:/ && $0 ~ product {print uuid}' a
7d8a98ab-e20c-4111-a873-6ce519729ed8