Bash printf输出从一行转换为多个参数

Bash printf输出从一行转换为多个参数,bash,printf,Bash,Printf,这是我代码的一部分: FCWWN=`fcinfo hba-port | grep HBA | awk '{print $4}'` for i in ${FCWWN} do FCREMOTE=`fcinfo remote-port -p ${i} | grep Remote | nawk '{print $4}'` PRODUCT=`/usr/sbin/luxadm display ${FCREMOTE} | grep Product | nawk -F: '{print $2}

这是我代码的一部分:

FCWWN=`fcinfo hba-port | grep HBA | awk '{print $4}'` for i in ${FCWWN} do FCREMOTE=`fcinfo remote-port -p ${i} | grep Remote | nawk '{print $4}'` PRODUCT=`/usr/sbin/luxadm display ${FCREMOTE} | grep Product | nawk -F: '{print $2}'` CAPACITY=`/usr/sbin/luxadm display ${FCREMOTE} | grep capacity | nawk -F: '{print $2}'` LUNNAME=`/usr/sbin/luxadm display ${FCREMOTE} | grep /dev/rdsk | grep -i -v DEVICE` FCSTATE=`fcinfo hba-port ${i} | grep State: | nawk '{print $2}'` echo "" echo -e The FC Port WWN "\033[1m \E[36;40m ${i} \033[0m is \033[1m \E[37;42m ${FCSTATE} \033[0m"; echo -ne "\E[0m" printf "################################################################################## \n" printf "%-6s %9s %18s \n" "LUN:" "Storage" "Disk" printf "%-6s %9s %18s \n" " " "Type" "Size" printf "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \n" printf "%-6s\n %9s\n %2s\n" "${LUNNAME}" "${PRODUCT}" "${CAPACITY}" done FCWWN=`fcinfo hba端口| grep hba | awk'{print$4}'` 对于${FCWWN}中的i 做 FCREMOTE=`fcinfo远程端口-p${i}| grep remote | nawk'{print$4}'` PRODUCT=`/usr/sbin/luxadm display${FCREMOTE}| grep PRODUCT | nawk-F:'{print$2}'` 容量=`/usr/sbin/luxadm display${FCREMOTE}| grep容量| nawk-F:'{print$2}'` LUNNAME=`/usr/sbin/luxadm display${FCREMOTE}| grep/dev/rdsk | grep-i-v设备` FCSTATE=`fcinfo hba端口${i}| grep State:| nawk'{print$2}'` 回声“” echo-e FC端口WWN“\033[1m\e[36;40m${i}\033[0m是\033[1m\e[37;42m${FCSTATE}\033[0m;echo-ne”\e[0m” 来自现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方本35现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场########\n“ printf“%-6s%9s%18s\n”LUN:“存储”磁盘 printf“%-6s%9s%18s\n”“类型”“大小” printf“=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n” printf“%-6s\n%9s\n%2s\n”“${LUNNAME}”“${PRODUCT}”“${CAPACITY}” 完成 输出为:

The FC Port WWN 10000000c9822976 is online ################################################################################## LUN: Storage Disk Type Size =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /dev/rdsk/c4t60060E80102A8AF005119C37000000C2d0s2 /dev/rdsk/c4t60060E80102A8AF005119C37000000C0d0s2 /dev/rdsk/c4t60060E80102A8AF005119C370000016Cd0s2 /dev/rdsk/c4t60060E80102A8AF005119C3700000028d0s2 /dev/rdsk/c4t60060E80102A8AF005119C37000000E1d0s2 DF600F DF600F DF600F DF600F DF600F 131072.000 MBytes 131072.000 MBytes 65536.000 MBytes 262144.000 MBytes 65536.000 MBytes The FC Port WWN 10000000c9822976 is online ################################################################################## LUN: Storage Disk Type Size =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /dev/rdsk/c4t60060E80102A8AF005119C37000000C2d0s2 DF600F 131072.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C37000000C0d0s2 DF600F 131072.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C370000016Cd0s2 DF600F 65536.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C3700000028d0s2 DF600F 262144.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C37000000E1d0s2 DF600F 65536.000 MBytes FC端口WWN 1000000C9822976处于联机状态 ################################################################################## LUN:存储磁盘 字体大小 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /dev/rdsk/C4T60060E80102A8AF005119C3700000C2D0S2 /dev/rdsk/C4T60060E80102A8AF005119C3700000C0D0S2 /dev/rdsk/C4T60060E80102A8AF005119C37000016CD0S2 /dev/rdsk/C4T60060E80102A8AF005119C370000028D0S2 /dev/rdsk/C4T60060E80102A8AF005119C3700000E1D0S2 DF600F DF600F DF600F DF600F DF600F 131072.000兆字节 131072.000兆字节 65536.000兆字节 262144.000兆字节 65536.000兆字节 所需输出为:

The FC Port WWN 10000000c9822976 is online ################################################################################## LUN: Storage Disk Type Size =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /dev/rdsk/c4t60060E80102A8AF005119C37000000C2d0s2 /dev/rdsk/c4t60060E80102A8AF005119C37000000C0d0s2 /dev/rdsk/c4t60060E80102A8AF005119C370000016Cd0s2 /dev/rdsk/c4t60060E80102A8AF005119C3700000028d0s2 /dev/rdsk/c4t60060E80102A8AF005119C37000000E1d0s2 DF600F DF600F DF600F DF600F DF600F 131072.000 MBytes 131072.000 MBytes 65536.000 MBytes 262144.000 MBytes 65536.000 MBytes The FC Port WWN 10000000c9822976 is online ################################################################################## LUN: Storage Disk Type Size =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /dev/rdsk/c4t60060E80102A8AF005119C37000000C2d0s2 DF600F 131072.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C37000000C0d0s2 DF600F 131072.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C370000016Cd0s2 DF600F 65536.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C3700000028d0s2 DF600F 262144.000 MBytes /dev/rdsk/c4t60060E80102A8AF005119C37000000E1d0s2 DF600F 65536.000 MBytes FC端口WWN 1000000C9822976处于联机状态 ################################################################################## LUN:存储磁盘 字体大小 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- /dev/rdsk/C4T60060E80102A8AF005119C3700000C2D0S2 DF600F 131072.000兆字节 /dev/rdsk/C4T60060E80102A8AF005119C3700000C0D0S2 DF600F 131072.000兆字节 /dev/rdsk/C4T60060E80102A8AF005119C37000016CD0S2 DF600F 65536.000兆字节 /dev/rdsk/C4T60060E80102A8AF005119C370000028D0S2 DF600F 262144.000兆字节 /dev/rdsk/C4T60060E80102A8AF005119C3700000E1D0S2 DF600F 65536.000兆字节
任何帮助都将不胜感激。

您非常接近。我没有资源进行测试,但我真的认为这将解决您的问题

不是

但是

额外的“\n”总是会换行,对吗

你也可以把它写成一个awk脚本

或者至少通过像这样重新编写脚本的前半部分来减少启动的进程数

PRODUCT=`/usr/sbin/luxadm display ${FCREMOTE} | nawk -F: '/Product/{print $2}'`
而且,当您使用nawk时,这对我来说是solaris。也许您正在编写/bin/sh(bourne shell脚本), 但如果不是这样的话,反勾号自1995年以来就被弃用了(至少是这样)

PRODUCT=$(/usr/sbin/luxadm display ${FCREMOTE} | nawk -F: '/Product/{print $2}')

IHTH

一种快速方法是将三个多行字符串转换为数组:

# bash 4 or later
mapfile -t LUN_ARR <<< "$LUNNAME"
mapfile -t PROD_ARR <<< "$PRODUCT"
mapfile -t CAP_ARR <<< "$CAPACITY"

# bash 3
IFS=$'\n' read -d '' -a LUN_ARR <<< "$LUNNAME"
IFS=$'\n' read -d '' -a PROD_ARR <<< "$PRODUCT"
IFS=$'\n' read -d '' -a CAP_ARR <<< "$CAPACITY"
#bash 4或更高版本

映射文件-t LUN\u ARR优秀的第一篇文章。示例输出、示例错误、实际代码。太棒了!感谢您的快速建议。printf“%-6s%9s%2s\n”-输出相同:/dev/rdsk/C4T60060E80102A8AF005119C3700000E1D0S2 DF600F DF600F DF600F DF600F 131072.000兆字节131072.000兆字节
for (( idx=0; idx < ${#LUN_ARR[@]}; idx++ )); do
    printf "%-40s %9s %s\n" "${LUN_ARR[idx]}" "${PROD_ARR[idx]}" "${CAP_ARR[idx]}"
done