1GiB以上を占めるフォルダのディスク使用量を返すコマンドを取得しようとしましたが、何らかの方法でコマンドの2番目の変数が最初の変数の値のみを印刷します。また、合計値は列には印刷されず、スペースが区切り文字として含まれるプレーンテキストで印刷されます。私がここで何を間違っているのか?
OUTPUT="$(sudo ls -lah -R |awk '/^total/ {print $2}' |sort -h)"; GIGS="$(echo $OUTPUT | grep G | sed 's/G//')"; echo $GIGS
ベストアンサー1
コマンド置換変数OUTPUTの新しい行は、echo
GIGSコマンド置換を実行するとトークン化されるまで保持されます。この時点で、出力はスペースで区切られた単一行になります。改行を維持するには、変数を引用してください。 GIGS変数はほぼOUTPUT変数のコピー - 最初の「G」が削除されたことがわかります。すべてのGを削除しようとすることができます。この場合は使用する必要がありますsed 's/G//g'
。
最終結果:
OUTPUT="$(sudo ls -lah -R |awk '/^total/ {print $2}' |sort -h)"; GIGS="$(echo "$OUTPUT" | grep G | sed 's/G//g')"; echo $GIGS
または複数行に分割します。
OUTPUT="$(sudo ls -lah -R |awk '/^total/ {print $2}' |sort -h)";
GIGS="$(echo "$OUTPUT" | grep G | sed 's/G//g')";
echo $GIGS
簡単にするために、awkでより多くのことを行うことを検討してください。
sudo ls -alhR | awk '/^total/ && /G$/ { print substr($2, 1, length($2)-1) }' | sort -n
これはawkマッチパターンを展開して行が 'G'で終わるようにし、(grep管理)印刷する前に文字列から末尾(G)文字を削除してからsort -n
最終的に簡単です。