请解释我应该如何使用以下方法完成以下操作awk
:
我需要146G
在 RAID 控制器上创建第一个两个驱动器的镜像。如果我显示空驱动器列表,我会得到以下结果:
Smart Array P420 in Slot 5
unassigned
physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS, 146 GB, OK)
physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS, 146 GB, OK)
physicaldrive 1I:1:4 (port 1I:box 1:bay 4, SAS, 900.1 GB, OK)
physicaldrive 2I:1:5 (port 2I:box 1:bay 5, SAS, 146 GB, OK)
physicaldrive 2I:1:6 (port 2I:box 1:bay 6, SAS, 146 GB, OK)
physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SAS, 900.1 GB, OK)
对于此示例,我将列表放入文件中free-drives
,然后创建命令。我想得到这样的输出:
drives=1I:1:1,1I:1:2
我的第一次尝试是
drives=$(awk '/146 GB/ { printf $2"," ;}; END{print ;}' free-drives)
但这会导致
1I:1:1,1I:1:2,2I:1:5,2I:1:6,
我找不到摆脱尾随逗号的正确方法,所以我过去常常sed
摆脱那个 [1]。
drives=$(awk '/146 GB/ { printf $2"," ;}; END{print ;}' free-drives|sed -e 's/,$//g')
我们仍然有 4 个磁盘,我需要两个。所以我尝试了一些我在5316572中读到的技巧,比如这个:
drives=$(awk 'a-->0;/146 GB/{ printf $2"," ;}{a=2}; END{print ;}' free-drives|sed -e 's?,$??g')
但这会产生一团糟。
那么,仅使用一个awk
oneliner 执行此操作的正确方法是什么?
[1]:如果您对如何解决此问题有任何建议:那也很棒;-)。