2014-05-07 50 views
1

我可以在回路中使用echo打印我的数组元素,但输出格式非常糟糕。那里我尝试注射标签,但只有很多元素之间的空格ssince每个元素的长度是不同的。我不知道如何使用printf?我试过了,但它不能正常工作。有没有一种方法来格式化我的printf或回显,因此每个元素之间有相同数量的空格?这让我发疯。使用printf打印没有空白的数组元素

while [[ $counter -lt $nai ]]; 
do 
#echo ${slist[$counter]} $'\t' ${sstate[$counter]} $'\t' $'\t' ${scached[$counter]} 
printf ${slist[$counter]} $'\t' ${sstate[$counter]} $'\t' $'\t' ${scached[$counter]} 
counter=$(($counter + 1)) 
done 

总之我只想打印我的格式元素与同等数量的元件之间的空间这样

abc cdf efg 

什么,我得到的是

abc  cdf   efg 

谢谢

+0

也许这将帮助你:[如何从bash变量修剪空白](http://stackoverflow.com/questions/369758/how-to-trim-whitespace-from-bash-variable) – Martin

+0

@Marti n'“你的打印语句”| tr -s'''''检查是否可行 – PradyJord

回答

1

如果要打印有N位元素在它们之间,可以使用printf:

a="foo" 
b="somestring" 
c="bar" 

# Print each argument with three spaces between them 
printf "%s " "$a" "$b" "$c" 
# Print a line feed afterwards 
printf "\n" 

这导致:

foo somestring bar 
otherdata foo bar 

您也可以使用格式%-12s垫每个元素12个字符:

# Pad each field to 12 characters 
printf "%-12s" "$a" "$b" "$c" 
printf "\n" 

结果造成:

foo   somestring bar   
otherdata foo   bar 
+0

感谢这项工作就好 – theuniverseisflat

1

尝试使用printf格式字符串

printf "%s %s %s\n" ${slist[$counter]} ${sstate[$counter]} ${scached[$counter]} 

如果字段没有空格,用column -t

{ 
echo my dog has fleas 
echo some random words here 
} | column -t 
my dog  has fleas 
some random words here 

或者,你的情况:while ...; do ...; done | column -t

+0

感谢它更好..有相等的间距..但由于元素长度不相同,所以它们没有正确对齐。有没有办法使它们正确对齐? – theuniverseisflat

+0

答复已更新。显示不止一行样本输入会很有帮助。 –