在我的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"显示结果。