从 linux bash 命令输出解析所有列元素

use*_*201 3 linux bash string-parsing

我想解析命令 lsscsi 输出的列元素。

这是一个示例输出,

# lsscsi

[0:0:0:0]   disk   ATA   VBOX HARDDISK   1.0   /dev/sda
[0:0:1:0]   disk   ATA   VBOX HARDDISK   1.0   /dev/sdb
[1:0:1:0]   disk   ATA   VBOX HARDDISK   1.0   /dev/sdc
Run Code Online (Sandbox Code Playgroud)

例如,如果我想要第 2 列,我的输出应该是,

disk
disk
disk
Run Code Online (Sandbox Code Playgroud)

如果第 7 列,

/dev/sda
/dev/sdb
/dev/sdc
Run Code Online (Sandbox Code Playgroud)

谢谢

anu*_*ava 6

像这样使用 awk:

awk -v col=7 '{print $col}' file
Run Code Online (Sandbox Code Playgroud)

或者打印 2 个柱状体:

awk -v col1=2 -v col2=7 '{print $col1, $col2}' file
Run Code Online (Sandbox Code Playgroud)

或者让它打印多列:

awk -v col='2:7' '{split (col, a, ":"); for (i in a) printf "%s%s", $a[i], OFS; print ""}' file
Run Code Online (Sandbox Code Playgroud)


Min*_*ius 5

使用 bash,您可以使用“read -a”,这会从标准输入读取一行,使用默认情况下具有空格的 IFS 字段分隔符进行分割,并填充可以作为 ${array[n]} (从零开始)引用的数组变量。

while read -a arr; do
    echo "${arr[1]}"
    echo "${arr[6]}"
done
Run Code Online (Sandbox Code Playgroud)