gpt4 book ai didi

linux - printf linux 问题 - lsusb 返回值返回一个长字符串

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:00 24 4
gpt4 key购买 nike

我有一个 USB 详细信息列表,其中列表不包含“Foundation”(以摆脱 Linux Foundation 行)。我按以下方式分配它们:

usb_details2()
{
bus=$(lsusb |grep -v Foundation | awk {'print $2'})
device=$(lsusb |grep -v Foundation | awk {'print $4'})
id=$(lsusb |grep -v Foundation | awk {'print $6'})
name1=$(lsusb |grep -v Foundation | awk {'print $7'})
name2=$(lsusb |grep -v Foundation | awk {'print $8'})
name3=$(lsusb |grep -v Foundation | awk {'print $9'})
name4=$(lsusb |grep -v Foundation | awk {'print $10'})
name5=$(lsusb |grep -v Foundation | awk {'print $11'})
name6=$(lsusb |grep -v Foundation | awk {'print $12'})
name7=$(lsusb |grep -v Foundation | awk {'print $13'})
name8=$(lsusb |grep -v Foundation | awk {'print $14'})
name9=$(lsusb |grep -v Foundation | awk {'print $15'})

printf "Bus: %s\tDevice: %s\tID: %s\t Device Name: %s %s %s" "$bus" "$device" "$id" "$name1" "$name2" "$name3" ...etc
}

echo $(usb_details2)

这只会返回一团糟:

Bus: 002 002 003 003 Device: 003: 007: 003: 002: ID: 058f:6366 148f:5370 045e:0745 093a:2510 Device Name: Alcor Ralink Microsoft Pixart Micro Technology, Corp. Imaging, Corp. Corp. Nano Inc.

这就是“lsusb |grep -v Foundation”返回的内容:

Bus 002 Device 003: ID 058f:6366 Alcor Micro Corp. Multi Flash Reader
Bus 002 Device 007: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
Bus 003 Device 003: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth
Bus 003 Device 002: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse

有没有办法可以像这样输出:

Bus   Device   ID           Device Name
002 003: 058f:6366 Alcor etc etc...
002 007: 148f:5370 ...
003 003: ... ...
003 002: ... ...

一定有更简单的方法!提前干杯。

最佳答案

echo $(usb_details2)

根据 field splitting 的 shell 规则,这会将 usb_details2 的所有输出合并到一行中。使用 IFS 的默认值。要保留嵌入的换行符,请使用引号:

echo "$(usb_details2)"

(由于 command substitution 规则,尾随换行符仍将被删除。)

甚至更简单:当您只​​是要 echo 或 printf 命令的确切输出时,根本不必使用命令替换。

usb_details2

您似乎想要打印第 2、4、6 列和第 7 列到最后一列。以下是如何使用单个管道和 awk 来完成此操作。

usb_details2() {
lsusb | grep -v Foundation | awk '
BEGIN {
printf "%s\t%s\t%s\t\t%s\n", "Bus", "Device", "ID", "Device Name"
}
{
printf "%s\t%s\t%s\t", $2, $4, $6
for(i=7; i<=NF; i++) printf "%s ", $i
printf "\n"
}'
}

usb_details2

关于linux - printf linux 问题 - lsusb 返回值返回一个长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40961678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com