Unix 使用分隔符格式化最后一列:

Unix 使用分隔符格式化最后一列:,unix,awk,scripting,Unix,Awk,Scripting,我有一个awk命令 awk '{printf "%-11s %-24s %-16s %-1s %-6s %-1s %-1s %-7s %-1s %-1s\n", $1, $2, $3,$4,$5,$6,$7,$8,$9,$10}' fhost2 那个输出这个 GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF652604 1 Module 7 1 FC_Port 7 1 GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CF

我有一个awk命令

awk '{printf "%-11s %-24s %-16s %-1s %-6s %-1s %-1s %-7s %-1s %-1s\n", $1, $2, $3,$4,$5,$6,$7,$8,$9,$10}' fhost2
那个输出这个

GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF652604 1 Module 7 1 FC_Port 7 1
GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF652604 1 Module 8 1 FC_Port 8 1
GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF652604 1 Module 9 1 FC_Port 9 1
GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF20D0A8 1 Module 7 1 FC_Port 7 3
如何使此输出看起来像这样

GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF652604 1:Module:7 1:FC_Port:7:1
GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF652604 1:Module:8 1:FC_Port:8:1
GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF652604 1:Module:9 1:FC_Port:9:1
GBL-SVC-ES1 GBL-esx403.ad.gbl.com 10008C7CFF20D0A8 1:Module:7 1:FC_Port:7:3

非常感谢您的帮助。

比您的代码更灵活的东西(如果字段数量增加,代码将变得巨大):

awk'
开始{
nCol=拆分(“45 7 8 9”,chgSepCol)

对于(i=1;i是否在需要时在
printf
命令中使用冒号而不是空格?
awk '
BEGIN{
   nCol = split("4 5 7 8 9", chgSepCol)
   for(i=1; i<=nCol;  i++){
       chgSep[chgSepCol[i]]
   }   
}
{
    for(i=1; i<NF; i++){
        sep = (i in chgSep)? ":" : OFS
        printf "%s%s", $i, sep
    }
    print $NF
}' file