使用等号作为分隔符的表格文本



在我的unix脚本中${job_details}是可变的。我在mailx-body命令中传递的这个变量用于在电子邮件中打印输出。

电流输出:

LABEL NAME =  AA 
APPLICATION NAME =  EST
ONSITE LEAD =  XXX 
OFFSHORE LEAD =  YYYY 
TEAM DL NAME =  k 
PROJECT MANAGER =  SSS 
SLA =  NULL 
CONFLUENCE LINK =  https:google.com

但我希望输出像一样正确对齐

LABEL NAME         =  AA 
APPLICATION NAME   =  EST
ONSITE LEAD        =  XXX 
OFFSHORE LEAD      =  YYYY 
TEAM DL NAME       =  k 
PROJECT MANAGER    =  SSS 
SLA                =  NULL 
CONFLUENCE LINK    =  https:google.com

我尝试了echo ${job_details}|column -t,但这对我没有帮助。在名字和姓氏中创建空格并添加制表符空间

只需将输入/输出分隔符更改为等号即可。

$ column -t -s= -o= <<< "${job_details}"
LABEL NAME       =  AA
APPLICATION NAME =  EST
ONSITE LEAD      =  XXX
OFFSHORE LEAD    =  YYYY
TEAM DL NAME     =  k
PROJECT MANAGER  =  SSS
SLA              =  NULL
CONFLUENCE LINK  =  https:google.com

使用AWK也可能得到相同的结果,这是它感兴趣的另一种方式。

echo "$job_details" | awk '
{
gsub(/^[ ]/, "", $0)
tab[NR]=$0
}
END{
for(x=1; x <= NR; x++){
split(tab[x],a,"=")
num=split(a[1],b,"")
if(c_lent < num){
c_lent=num
}
}
for(y=1; y <= NR; y++){
split(tab[y],c,"=")
printf "%*-s=%sn",c_lent, c[1],c[2]
}
}' 

解释

首先,我创建了一个数组,在其中放入所有"$0"条目,(NR(允许对数组进行动态索引。在END部分,我计算第一列的最长字符串,然后读取数组并使用命令"printf"显示结果。

最新更新