awk忽略我为第一条logging设置的logging分隔符

我试图改变logging分隔符,但awk不使用logging分隔符我设置,直到第二个logging和以后。

我得到这样的输出:

ARRAY /dev/md4 level=raid1 num-devices=2 metadata=0.90 UUID=e85beb4f:84b05929:786a31c9:93e269d4 ARRAY /dev/md6 level=raid1 num-devices=2 metadata=0.90 UUID=4dbc659a:4d11f1be:6cbe4d26:c1372c53 ARRAY /dev/md5 level=raid1 num-devices=2 metadata=0.90 UUID=7d34fc96:1fa6c3c5:b9932435:ad126815 ARRAY /dev/md3 level=raid1 num-devices=2 metadata=0.90 UUID=862ae8d0:bd00b2fd:9e171b97:2937fc49 ARRAY /dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=03bb1b77:42d474f4:608c5276:cc04d84c ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=6c14cddc:3ef74d2d:2f26fa3f:32cc274b ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=76e50525:9ae71e74:9697a0e6:6f77e132 

我需要这样的输出:

 ARRAY=/dev/md4 level=raid1 num-devices=2 metadata=0.90 UUID=e85beb4f:84b05929:786a31c9:93e269d4 ARRAY=/dev/md6 level=raid1 num-devices=2 metadata=0.90 UUID=4dbc659a:4d11f1be:6cbe4d26:c1372c53 ARRAY=/dev/md5 level=raid1 num-devices=2 metadata=0.90 UUID=7d34fc96:1fa6c3c5:b9932435:ad126815 ARRAY=/dev/md3 level=raid1 num-devices=2 metadata=0.90 UUID=862ae8d0:bd00b2fd:9e171b97:2937fc49 ARRAY=/dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=03bb1b77:42d474f4:608c5276:cc04d84c ARRAY=/dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=6c14cddc:3ef74d2d:2f26fa3f:32cc274b ARRAY=/dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=76e50525:9ae71e74:9697a0e6:6f77e132 

当我尝试格式化它时,awk对第一个logging没有任何帮助,但是对其余的recor进行了正确的格式化。

这里是我用输出的命令:

 $ mdadm --misc -sD |sed 's/ /=/' |awk '{RS=" "}{print $0}' ARRAY=/dev/md4 level=raid1 num-devices=2 metadata=0.90 UUID=e85beb4f:84b05929:786a31c9:93e269d4 ARRAY=/dev/md6 level=raid1 num-devices=2 metadata=0.90 UUID=4dbc659a:4d11f1be:6cbe4d26:c1372c53 ARRAY=/dev/md5 level=raid1 num-devices=2 metadata=0.90 UUID=7d34fc96:1fa6c3c5:b9932435:ad126815 ARRAY=/dev/md3 level=raid1 num-devices=2 metadata=0.90 UUID=862ae8d0:bd00b2fd:9e171b97:2937fc49 ARRAY=/dev/md2 level=raid1 num-devices=2 metadata=0.90 UUID=03bb1b77:42d474f4:608c5276:cc04d84c ARRAY=/dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=6c14cddc:3ef74d2d:2f26fa3f:32cc274b ARRAY=/dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=76e50525:9ae71e74:9697a0e6:6f77e132 

而且我不能使用这个命令,因为它离开了数组,我需要这个mdadm --misc -sDY

使用sed两次,第二次用换行符replace空格:

 mdadm --misc -sD | sed 's/ /=/'| sed 's/ /\n/g' 

或稍微优化,只有一次,但有两种模式:

 mdadm --misc -sD | sed 's/ /=/;s/ /\n/g' 

我也喜欢@SvW提供的sed-only解决scheme,但回答你的问题:

RS=" "来得太晚。 读取第一行后设置。 您应该在BEGIN块中调用它,例如,对第一行也有影响:

mdadm --misc -sD | sed 's/ /=/' | awk 'BEGIN{RS=" "}{print $0}'

编辑:好的,@Thor更快。 🙂

您的解决scheme无法正常工作,因为RS在此过程中设置得太晚。 在awk收到任何input之前将其设置,并且正常工作:

 mdadm --misc -sD | sed 's/ /=/' | awk '{print $0}' RS=' ' 

也许下面awk唯一的答案也是有用的:

 mdadm --misc -sD | awk '{$2=$1"="$2; $1=""} 1' OFS='\n'