我试图改变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'