動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
NCAR Command Language Version 6.3.0
for WRF3.7.1, WPS3.7.1
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
for WRF3.9, WPS3.9
Open MPI v2.1.1
gcc version 4.9.2 (とgfortran; devtoolset-3使用)
NetCDF v4.4.1.1, NetCDF (Fortran API) v4.4.4
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
date (GNU coreutils) 8.4
tmux 1.6-3.el6
背景
$ ls
AAA01 AAA02 AAA03 BBB01 BBB02 BBB03 BBB04 bundle_similar_file_180202_exec CCC01
AAA*やBBB*やCCC*など共通のprefixを持つファイルが一つのディレクトリに数百個あると、そのファイルが目立ち、他にどういうファイルがあるか見つけにくい。
他のファイルも含めてみるためのスクリプトを検討した。
- 指定の文字長さでuniq処理する
参考
-
bashで変数から部分文字列を取得する
- > オフセットと長さを指定して文字列を取得する
-
昨日〜9日前までの日付を空白区切りで返すサンプル
-
--max-args=1
の使用例
-
code v0.1
(追記 2018/02/02)
同じ処理は@tukiyo3 さんのコメントでもっとシンプルに実装されています。
bundle_similar_file_180202_exec
#!/usr/bin/env bash
set -eu
if [ $# -eq 0 ]; then
echo "[cmd] [number of common characters]"
exit 0
fi
CHECK_LEN=$1
RESULT=$(
for elem in $(ls)
do
echo ${elem:0:$CHECK_LEN}
done
)
echo $RESULT | xargs --max-args=1 echo | uniq
実行例
文字長さ3での実行例。
run
$ bash bundle_similar_file_180202_exec 3
AAA
BBB
bun
CCC
文字長さ5での実行例。
run
$ bash bundle_similar_file_180202_exec 5
AAA01
AAA02
AAA03
BBB01
BBB02
BBB03
BBB04
bundl
CCC01
使い勝手が良いかは不明。
bunでなくbundle_similar_file_180202_exec と表示されると良いだろうか。
code v0.2
少し変えてみた。
answered Nov 30 '15 at 1:25
Tom Zych
bundle_similar_file_180202_exec
#!/usr/bin/env bash
set -eu
if [ $# -eq 0 ]; then
echo "[cmd] [number of common characters]"
exit 0
fi
ls | uniq -w $1
スクリプト不要
つまり、以下だけで良いということ。
$ ls | uniq -w 3
AAA01
BBB01
bundle_similar_file_180202_exec
CCC01
リストの改行を取り除きたい場合は
$ ls | uniq -w 3 | xargs
AAA01 BBB01 bundle_similar_file_180202_exec CCC01