如何用awk解析unix目录

时间:2016-06-01 13:34:02

标签: awk

我需要你的帮助来解析awk的目录信息。 通过下面的输入,我可以获得每个行的完整目录名称和文件名吗? 也就是说,目录结构各不相同,并且目录数量没有规则。

输入(文件路径列表)

/dir1/filename
/dir1/dir2/filename
/dir1/dir2/dir3/filename
/dir5/dir2/dir4/filename

输出(目录名和文件名之间的任何空格都可以)

/dir1/         filename
/dir1/dir2/           filename
/dir1/dir2/dir3/                   filename
/dir5/dir2/dir4/          filename

3 个答案:

答案 0 :(得分:3)

听起来这可能是你正在寻找的东西:

$ awk '{sub("[^/]+$","\t&")}1' file
/dir1/  filename
/dir1/dir2/     filename
/dir1/dir2/dir3/        filename
/dir5/dir2/dir4/        filename

但任何解决方案都会出现文件和/或目录名称的问题,这些名称包含用于导入您提及的数据库的分隔符。

答案 1 :(得分:1)

还有更简洁的答案,但这里的答案基于match并得到了Ed的评论:

{ 
  dname = substr($0, match($0, ".*/"), RLENGTH); 
  fname = substr($0, RLENGTH+1); 
  printf("%s %s\n", dname, fname); 
}

<强>输入

/dir1/filename
/dir1/dir2/filename
/dir1/dir2/dir3/filename
/dir5/dir2/dir4/filename
../dir3/file

<强>输出

/dir1/ filename
/dir1/dir2/ filename
/dir1/dir2/dir3/ filename
/dir5/dir2/dir4/ filename
../dir3/ file

答案 2 :(得分:1)

gawk

awk '{print gensub("(.*)/(.*)","\\1 \\2","g")}' File