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)
谢谢
像这样使用 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)
使用 bash,您可以使用“read -a”,这会从标准输入读取一行,使用默认情况下具有空格的 IFS 字段分隔符进行分割,并填充可以作为 ${array[n]} (从零开始)引用的数组变量。
while read -a arr; do
echo "${arr[1]}"
echo "${arr[6]}"
done
Run Code Online (Sandbox Code Playgroud)