我需要遍历hdfs上的多个目录。我想打印出每个文件的名称,以及文件中的行数。我已经让它几乎工作,除了有一个文件名和计数之间的换行符。这是我的密码:
for filename in `hdfs dfs -ls /path/to/main/directory/*/*part* | awk '{print $NF}' `; do echo $filename ; hdfs dfs -cat $filename | wc -l; done > foo.out
在输出中,我得到:
/path/to/file1
# of rows
/path/to/file2
# of rows
... 我如何防止它在文件名后破裂?
1条答案
按热度按时间wvmv3b1j1#
如果我们分解for循环的代码,两个命令将依次执行第一个echo命令,然后是hdfs命令,这就是为什么输出带有换行符的原因。有多种方法可以达到预期的产出,但下面是我的两分钱。
方法1:使用-n选项从echo中省略尾随的换行符。
使用上述方法,您将获得filename和count,中间没有任何空格或分隔符。可以在echo语句本身中添加空格或任何分隔字符。
方法2:通过使用backquote(acute)在echo语句中执行hdfs命令,将echo和hdfs命令组合成一行。