fstabの下にリストされているエントリに基づいてマウントされたファイルシステムを確認するスクリプトがあります。ここで直面する問題は、出力を整列したままにすることです。
以下はスクリプト出力です。
/ is mounted OK
/boot is mounted OK
/was8 is mounted OK
/was8/slogs is mounted OK
/was8/cluster is mounted OK
/was8/working is mounted OK
/was8/app is mounted OK
/was8/tools is mounted OK
/was8/plugin is mounted OK
/was8/coreproduct is mounted OK
...
線を整列したままにしたいので、次のようにする必要があります。
/ is mounted OK
/boot is mounted OK
/was8 is mounted OK
/was8/slogs is mounted OK
/was8/cluster is mounted OK
/was8/working is mounted OK
/was8/app is mounted OK
/was8/tools is mounted OK
/was8/plugin is mounted OK
/was8/coreproduct is mounted OK
...
列とxargsを試しましたが、目的の結果を取得できませんでした。誰か私を助けてください。
ベストアンサー1
通常、印刷するときに書式文字列の幅をprintf
。文字列は、オーバーフローしない限り、20文字(*)幅のフィールドに印刷されます。%-20s
20文字にしてオーバーフローを削除します。%-20.20s
(*例えば、Bashはprintf
本当に重要ですが、バイト。違いはUTF-8などの文字で確認できますä
。 )
例えば
printf "%-40s %s\n" "$mountpoint is mounted" "$status"
最初の部分の幅は(少なくとも)40文字です。
/was8/coreproduct is mounted OK
...
または、これらの入力を後処理する必要がある場合は、Perlまたはawkを使用できます。
perl -pe 's/(.*) +(\S+)$/ sprintf "%-40s %s", $1, $2 /e' < file
awk '{s=$NF; sub(/ *[^ ]+ *$/, "", $0); printf "%-40s %s\n", $0, s}' < file
両方とも、デフォルトでは空白ではなく最後の文字列を分離し、固定幅フィールドの最初の部分と一緒に2つの部分を印刷します。
あるいは、フィールド間の区別をまったく同じに保つことを気にしなければ、@はより簡単な解決策に注釈を付けました。ジョアオする:
awk '{s=$NF; NF-- ; printf "%-40s %s\n", $0, s}' < file
これにより、次のような出力が生成されます。以前の2つのスペースがis mounted
1つに縮小されました。これは、awk
フィールドが変更されたときにフィールド全体が再作成されるために発生します。$0
NF
/was8/coreproduct is mounted OK