我在BASH脚本中显示了一些状态文本,例如:
Removed file "sandwich.txt". (1/2)
Removed file "fish.txt". (2/2)
我希望将进度文本(1/2)
完全显示在右侧,与终端窗口的边缘对齐,例如:
Removed file "sandwich.txt". (1/2)
Removed file "fish.txt". (2/2)
我在right align/pad numbers in bash和right text align - bash尝试了解决方案,然而,这些解决方案似乎没有用,它们只是形成一个很大的空白区域,例如:
Removed file "sandwich.txt". (1/2)
Removed file "fish.txt". (2/2)
如何让一些文本左对齐,一些文本右对齐?
答案 0 :(得分:4)
printf "Removed file %-64s (%d/%d)\n" "\"$file\"" $n $of
文件名周围的双引号是不拘一格的,但是将文件名用双引号括起来printf()
命令,然后在宽度为64的字段中将该名称左对齐。
调整以适应。
$ file=sandwich.txt; n=1; of=2
$ printf "Removed file %-64s (%d/%d)\n" "\"$file\"" $n $of
Removed file "sandwich.txt" (1/2)
$
答案 1 :(得分:3)
这将自动调整到您的终端宽度,无论是什么。
[ghoti@pc ~]$ cat input.txt
Removed file "sandwich.txt". (1/2)
Removed file "fish.txt". (2/2)
[ghoti@pc ~]$ cat doit
#!/usr/bin/awk -f
BEGIN {
"stty size" | getline line;
split(line, stty);
fmt="%-" stty[2]-9 "s%8s\n";
print "term width = " stty[2];
}
{
last=$NF;
$NF="";
printf(fmt, $0, last);
}
[ghoti@pc ~]$ ./doit input.txt
term width = 70
Removed file "sandwich.txt". (1/2)
Removed file "fish.txt". (2/2)
[ghoti@pc ~]$
您可以删除BEGIN块中的print
;就在那里展示宽度。
要使用它,基本上只需通过awk脚本管道任何现有的状态行创建,它会将最后一个字段移动到终端的右侧。