bash-3.00$ cat f.txt
-rw-r--r-- 1 mukesh other 102 Nov 5 18:32 f1.txt
-rw-r--r-- 1 mukesh other 19 Nov 5 18:32 f2.txt
-rw-r--r-- 1 mukesh other 204 Nov 5 18:32 f3.txt //DUPLICATE
-rw-r--r-- 1 mukesh other 204 Nov 6 18:32 f3.txt //DUPLICATE
-rw-r--r-- 1 mukesh other 204 Nov 6 18:32 f100.txt
f.txt というファイルに上記のファイル名がリストされているとします。重複したファイル名をすべてリストしたいです(ファイル名のみ)、重複したファイル名と重複した数を表示します。
例:上記のリストにはf3.txtの重複があり、合計2つのf3.txtファイル名が見つかりました。
ベストアンサー1
述べたように、awk
解決策は次のとおりです。
awk '{d[$9]++}END{for(f in d)if(d[f]>1)print d[f],f}' f.txt
名前にスペース文字を含むファイルもある場合は、いくつかの回避策が必要です。
awk '{f=$9;for(i=10;i<=NF;i++)f=f" "$i;d[f]++}END{for(f in d)if(d[f]>1)print d[f],f}' f.txt
たとえば、シンボリックリンクを処理すると、上記の回避策が失敗する可能性があります。結局のところ、ls
出力を解析するのは良い考えではありません。可能であれば、別の方法でf.txtを生成することをお勧めします。 (たとえば、find
リストstat
形式をより細かく制御できます。)