ls有返回字段子集的选项吗?

nue99wik  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(338)

命令
hadoop fs-ls/数据
将以以下格式返回给定路径中的所有子目录:
vdrwxr-xr-x+-myuser mygroup 0 2017-02-13 14:23/data/mysubdirectory
我怎样才能发出只返回部分字段的命令。例如日期和子目录:
2017年2月13日/data/mysubdirectory

fcg9iug3

fcg9iug31#

文件中没有显示这样的选项:
https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/filesystemshell.html#ls
您可以通过管道将hadoop fs-ls的输出传输到awk之类的东西,并打印所需的列。

hadoop fs -ls /data | awk '{print $6 " " $8;}'

下面是使用awk live editor完成的示例:
https://awk.js.org/?gist=05aea37413e0e026af98689296705dbd
另一种选择是使用java或其他jvm语言中的hdfs客户机api。在那里,您可以调用filesystem#liststatus来获取filestatus,它提供了hadoop fs-ls正在打印到控制台的所有信息。

// Get configuration from HADOOP_CONF_DIR
// org.apache.hadoop.conf.Configuration configuration = ...

FileSystem fs = FileSystem.get(configuration);

for (FileStatus fileStatus : fs.listStatus(new Path("/data"))) {
  // fileStatus.getModificationTime() -> format date
  // fileStatus.getPath() -> extract filename
}
b4lqfgs4

b4lqfgs42#

最后我做了这样的事:

hadoop fs -ls /data/ | while read f; do     
    echo ${f} | cut -d' ' -f 6,8
done

其中,对于这种情况,6和8表示最后修改日期和文件名字段。ls在此处返回的所有可能字段

相关问题