2016-10-13 18 views
7

Potrzebuję pętli nad wszystkimi plikami csv w systemie plików Hadoop. Mogę listę wszystkich plików w katalogu HDFS zPętla bash nad plikami w katalogu hdfs

> hadoop fs -ls /path/to/directory 
Found 2 items 
drwxr-xr-x - hadoop hadoop   2 2016-10-12 16:20 /path/to/directory/tmp 
-rwxr-xr-x 3 hadoop hadoop 4691945927 2016-10-12 19:37 /path/to/directory/myfile.csv 

i pętla może ponad wszystkie pliki w standardowym katalogu z

for filename in /path/to/another/directory/*.csv; do echo $filename; done 

ale jak mogę połączyć dwa? Próbowałem

for filename in `hadoop fs -ls /path/to/directory | grep csv`; do echo $filename; done 

ale to daje mi jakieś bzdury jak

Found 
2 
items 
drwxr-xr-x 

hadoop 
hadoop 
2  
2016-10-12 
.... 
+0

'Hadoop FS -ls/ścieżki do/katalog/| grep csv' powinien dać ci listę linii standardowych, niekoniecznie tylko nazwy plików. –

+0

Zobacz w innym pytaniu ładny sposób na pętlę: http://stackoverflow.com/questions/28685471/loop-through-hdfs-datalogories –

Odpowiedz

3

To powinno działać

for filename in `hadoop fs -ls /path/to/directory | awk '{print $NF}' | grep .csv$ | tr '\n' ' '` 
do echo $filename; done 
+0

To działa jak urok! Ale drukuje całą ścieżkę do pliku. Jak mogę go skrócić tak, aby wyświetlał tylko nazwę pliku? – user3270763

+1

Dla każdego, kto szuka podobnego rozwiązania, użyj "cut", aby uzyskać podciąg. $ (echo $ nazwa_pliku | cut -f4 -d /) – user3270763

+1

Mogę odnieść się do http://stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash for short – matesc