unix中串联2个变量的格式输出

unix中串联2个变量的格式输出,unix,Unix,我正在编写一个简单的shell脚本,用于检查目标路径的空间和该目标路径上每个目录的空间利用率(例如,我正在检查/path1/home的空间,还检查/path1/home上的所有文件夹如何消耗总空间。)我的问题是关于它生成的输出,它不太好看(间距不均匀)。请参见下面的示例输出行 SIZE USER_FOLDER DATE_LAST_MODIFIED 83G FOLDER 1 Apr 15 03:45 34G FOLDER 10 Mar 9 05:02 26G FOLDER 11 Mar 29 13

我正在编写一个简单的shell脚本,用于检查目标路径的空间和该目标路径上每个目录的空间利用率(例如,我正在检查/path1/home的空间,还检查/path1/home上的所有文件夹如何消耗总空间。)我的问题是关于它生成的输出,它不太好看(间距不均匀)。请参见下面的示例输出行

SIZE USER_FOLDER DATE_LAST_MODIFIED
83G FOLDER 1 Apr 15 03:45
34G FOLDER 10 Mar 9 05:02
26G FOLDER 11 Mar 29 13:01
8.2G FOLDER 100 Apr 1 09:42
1.8G FOLDER 101 Apr 11 13:50
1.3G FOLDER 110 Feb 16 09:30
我只希望输出格式与标题保持一致,这样它看起来会很整洁,因为我会将其用作报告。下面是我用于此部分的代码

ls -1 | grep -v "lost+found" |grep -v "email_body.tmp" > $v_path/Users.tmp 
for user in `cat $v_path/Users.tmp | grep -v "Users.tmp"` 
do
    folder_size=`du -sh $user 2>/dev/null` # should be run using a more privileged user so that other folders can be read (2>/dev/null was used to discard error messages i.e. "du: cannot read directory `./marcnad/.gnupg': Permission denied")
    folder_date=`ls -ltr | tr -s " " | cut -f6,7,8,9, -d" " | grep -w $user | cut -f1,2,3, -d" "`
    folder_size="$folder_size               $folder_date"
    echo $folder_size >> $v_path/Users_Usage.tmp 
done

echo "Summary of $v_path Disk Space Utilization per folder." >> email_body.tmp 
echo "" >> email_body.tmp 
echo "SIZE USER_FOLDER DATE_LAST_MODIFIED" >> email_body.tmp

for i in T G M K
do
    cat $v_path/Users_Usage.tmp | grep [0-9]$i | sort -nr -k 1  >> $v_path/email_body.tmp 
done
谢谢!
编辑:格式化

打印数据时,使用printf而不是echo

cat $v_path/Users_Usage.tmp | while read a b c d e f
do
    printf '%-5s%-7%s%-4s%-4s%-3s-6s' $a $b $c $d $e $f
done

请参见

请对示例数据使用与代码相同的格式化工具(
{}
)。使用固定宽度类型更易于可视化数据;-)<代码>grep'[0-9]'“$i”$v_path/Users_Usage.tmp |……效率更高(
cat
在使用std in/std out时是冗余的)。祝你好运。嗨,谢谢你建议固定宽度,对于其他人,我使用printf'\%-Xs\n'$txt。其中x是列的宽度,$txt是要打印的符号。我不清楚,顶部的报表现在是否以当前格式显示?您希望数据与列标题对齐吗?今天大部分时间我都不在。可能其他人会帮助您改进问题描述。但是,不要在这里回复我的Q,看看你是否可以让你的Q遵循“我有这个数据,我希望它看起来像X,但它看起来像Y,我在使用这个代码,我做错了什么?”。Plus1用于示例数据,并已尝试解决您的问题!祝你好运