左边有些文字,右边有些文字,单行,有BASH

时间:2012-04-04 02:16:08

标签: bash

我在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 bashright text align - bash尝试了解决方案,然而,这些解决方案似乎没有用,它们只是形成一个很大的空白区域,例如:

Removed file "sandwich.txt".                           (1/2)
Removed file "fish.txt".                           (2/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脚本管道任何现有的状态行创建,它会将最后一个字段移动到终端的右侧。