
答え1
ls
合計を生成しませdu
んが、
du -sch *.csv
16K LdevInfo.csv
8.0K LunInfo.csv
4.0K W.csv
4.0K WwnInfo.csv
32K total
wc
銃を生産します
wc -l *.csv
101 LdevInfo.csv
66 LunInfo.csv
62 W.csv
8 WwnInfo.csv
237 total
それから単にjoin
join -j 2 -o 1.1,2.1,2.2 v w
101 16K LdevInfo.csv
66 8.0K LunInfo.csv
62 4.0K W.csv
8 4.0K WwnInfo.csv
237 32K total
どこ
-j 2
一致のためにフィールド2を使用するように結合に指示する-o 1.1,2.1,2.2
指定されたファイル FILENUM.FIELDNUM を印刷します。
あるいは、追加のawkを使用してフォーマットを素敵に指定することもできます。
join -j 2 v w| awk '{printf "%s\t%s\t%s\n",$2,$3,$1}'
101 16K LdevInfo.csv
66 8.0K LunInfo.csv
62 4.0K W.csv
8 4.0K WwnInfo.csv
237 32K total
PS:私は*.png
それを使用していませんが、*.csv
これはうまくいきます。
答え2
まず、次の関数を使用して、lsに合計が含まれない問題を解決する必要があります。
myls() {
if [ $# -gt 1 ] ; then
ls -1sh "$@"
ls -1s "$@" | cut -d' ' -f1 | awk '{s+=$1} END {print s}' | numfmt --to=iec --suffix=' total'
else
ls -1sh "$1"
fi
}
.bashrc
本人が直接入れてロードしてください。
その後、出力をマージする必要があります。これを行う方法はいくつかあります。以下は一つです。まず、すべての出力を貼り付けと組み合わせます。残念ながら、貼り付けはファイルを引数としてのみ許可しますが、名前付きパイプを使用してそれを処理できます。
combined() {
paste <(wc -l "$@") <(myls "$@") | awk '{print $1, $3, $4}' | sort
}
この関数を今すぐ入れることができます.bashrc
。スキーマが読めると思ったので並べ替えました。| sort
ソートしたくない場合は削除できます。
アドインを無効にするには、次の手順を実行します。
myd() {
if [ $# -gt 1 ] ; then
tmp=`ls -1sh "$@";ls -1s "$@" | cut -d' ' -f1 | awk '{s+=$1} END {print s}' | numfmt --to=iec --suffix=' total'`
else
tmp=`ls -1sh "$1"`
fi
paste <(wc -l "$@") <(echo "$tmp") | awk '{print $1, $3, $4}' | sort
}