私たちは数値バージョンのファイルを使用します(例:report01.log.01、report01.log.02、report01.log.03など)。
私がすべきことは、各ファイルのリストとそのファイルのバージョン数を生成することです。
これを比較的簡単に実行できる機能はLinuxにありますか?
答え1
もう一つのアプローチ:ls | cut -f1 -d. | uniq -c
。
awk
方法:ls | awk -F. '{a[$1]++}END{for(b in a){print b,a[b]}}'
(冗長な)perl
方法:ls|perl -e 'while(<>){$a{(split(/\./,$_))[0]}++}for(sort keys %a){print "$_ $a{$_}\n"}'
答え2
などの出力を解析しないことをお勧めしますls
。find
解析 - Greg's Wikiこれがなぜ悪い考えなのか説明してください。)
代わりに、パラメータ拡張Bash配列では、ファイル拡張子なしでリストを生成できます。
filelist=(*); # or filelist=(*.log.*) to be more precise
printf '%q\n' "${filelist[@]%.*}" # or echo "${filelist[@]%.*}"
次に、ファイルを個別に処理します。
for i in "${filelist[@]%.*}"; do
echo "$i";
done
OPの特定の目的のためにbashを使用することができます。連想配列バージョン数を保存します。
filelist=(*.log.*)
declare -A count
for i in "${filelist[@]%.*}"; do
(( count["$i"]++ ));
done
for j in "${!count[@]}"; do
printf '%q\t%q\n' "$j" "${count[$j]}";
done | sort
report01.log 6
report02.log 6
report03.log 6
report04.log 6
report05.log 6
答え3
このようなことls | sed -e 's/\.[0-9]\+$//' | sort | uniq -c
が望むことをする必要があります。