2016-10-13 20 views
7

Tôi cần lặp qua tất cả các tệp csv trong hệ thống tệp Hadoop. Tôi có thể liệt kê tất cả các tập tin trong một thư mục HDFS vớiVòng lặp Bash trên các tệp trong thư mục 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 

và có thể lặp qua tất cả các file trong một thư mục tiêu chuẩn với

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

nhưng làm thế nào tôi có thể kết hợp hai? Tôi đã thử

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

nhưng điều đó mang lại cho tôi một số vô nghĩa như

Found 
2 
items 
drwxr-xr-x 

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

'fs hadoop -ls/path/to/thư mục | grep csv' sẽ cung cấp cho bạn danh sách các dòng tiêu chuẩn, không nhất thiết chỉ là tên tệp. –

+0

Xem trong câu hỏi khác một cách hay để làm một vòng lặp: http://stackoverflow.com/questions/28685471/loop-through-hdfs-directories –

Trả lời

3

này nên làm việc

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

Điều này hoạt động giống như một sự quyến rũ! Nhưng nó in toàn bộ đường dẫn đến tệp. Làm thế nào tôi có thể cắt ngắn để nó chỉ in tên tập tin? – user3270763

+1

Đối với bất kỳ ai tìm kiếm một giải pháp tương tự, hãy sử dụng 'cut' để lấy chuỗi con. $ (echo $ filename | cut -f4 -d /) – user3270763

+1

Tôi có thể tham khảo http://stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash cho ngắn – matesc

Các vấn đề liên quan