2012-04-04 7 views
0

と私は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

"2番目の解決方法では、右端が端末の右端に常に並んでいるとは限りません"という理由は、最初の解決策が複雑な理由です。 –

+0

[bashの右揃え/パッド番号]の重複が可能です(http://stackoverflow.com/questions/994461/right-align-pad-numbers-in-bash) –

+0

重複していません。この質問は、printfの使い方だけでなく、端末の端に右寄せすることに関するものです。 – ghoti

答えて

3
printf "Removed file %-64s (%d/%d)\n" "\"$file\"" $n $of 

二重引用符が折衷されているが、その後、幅64

のフィールドに名前が左寄せことを印刷しますprintf()コマンドに二重引用符で囲まれたファイル名を取得します調整してください。

$ file=sandwich.txt; n=1; of=2 
$ printf "Removed file %-64s (%d/%d)\n" "\"$file\"" $n $of 
Removed file "sandwich.txt"             (1/2) 
$ 
2

これは自動的に端末の幅に合わせて調整されます。

[[email protected] ~]$ cat input.txt 
Removed file "sandwich.txt". (1/2) 
Removed file "fish.txt". (2/2) 
[[email protected] ~]$ 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); 
} 

[[email protected] ~]$ ./doit input.txt 
term width = 70 
Removed file "sandwich.txt".         (1/2) 
Removed file "fish.txt".          (2/2) 
[[email protected] ~]$ 

あなたはBEGINブロックでprintを削除することができます。それはちょうど幅を示すためにそこにあった。

これを使用するには、基本的にawkスクリプトを使って既存のステータスラインをパイプするだけで、最後のフィールドを端末の右側に移動します。

関連する問題