답변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
추신: 나는 *.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
}