#bash #shell #apache-spark-sql #hdfs
#bash #оболочка #apache-spark-sql #hdfs
Вопрос:
У меня есть каталог HDFS с более чем тысячью записей, который содержит разные имена файлов. Я должен подсчитывать файлы на основе имени файла. Поскольку у меня есть тысячи файлов, я не могу указать конкретное имя файла для подсчета.
Например, каталог содержит следующие файлы
/a/b/a.txt
/a/b/b.txt
/a/b/c.txt
/a/b/a.txt
/a/b/b.txt
/a/b/c.txt
Результат должен быть
a.txt 2
b.txt 2
c.txt 2
Комментарии:
1. Я не думаю, что одинаковые имена файлов возможны в папке.
2. Вы хотели сказать
a/a/a.txt
,a/b/a.txt
, …?
Ответ №1:
Это ни в коем случае не эффективное решение, но если вы просто хотите быстро что-то написать, оно подойдет:
find . -exec basename {} ; | sort | uniq -c | sort
Объяснение:
- найдите все файлы в текущем каталоге и выведите их базовое имя (просто имя файла, удалите родительские каталоги). Чтобы изменить корень поиска, укажите путь, а не
.
- отсортируйте список в алфавитном порядке (это необходимо для выполнения следующего шага)
- подсчитывать каждый элемент (флаг-c
uniq
подсчитывает каждое вхождение) - отсортируйте этот список для просмотра в порядке возрастания.
В моей системе это дает что-то вроде
... removed some output for clarity ...
2 CMakeLists.txt
2 heads
2 hello
2 info
2 origin
2 refs
2 remotes
2 test
2 test.cpp
4 .gitignore
4 HEAD
4 master
5 Makefile
Комментарии:
1. я делал что-то неправильно … исправил это … спасибо за помощь.