我有一个awk处理简单的问题。 但对我来说并不简单明了。 这就是我需要解析的内容:
$ cat file
/dir1/dir11/file1
/dir10/dir103/file2
/dir2/dir21/dir221/file3
对于我来说,需要分离文件路径(没有文件名),例如:
/dir1/dir11
/dir10/dir103
/dir2/dir21/dir221
我已经尝试过这个:
$ cat file | awk -F"/" '{for (i=1;i<NF;i++) print $i}'
dir1
dir11
dir10
dir103
dir2
dir21
dir221
和此:
$ cat file | awk -F"/" '{for (i=1;i<NF;i++) printf $i}'
dir1dir11dir10dir103dir2dir21dir221
和最佳结果:
$ cat file | awk -F"/" '{ $NF=""; print}'
dir1 dir11
dir10 dir103
dir2 dir21 dir221
但在路径中仍然缺少/
。
答案 0 :(得分:1)
这个awk应该可以工作:
awk 'BEGIN{FS=OFS="/"} {$NF=""}'1 file
答案 1 :(得分:0)
如果修改记录,则需要设置输出字段分隔符。如果您有GNU awk
:
$ awk '{NF--}1' FS='/' OFS='/' file
/dir1/dir11
/dir10/dir103
/dir2/dir21/dir221
否则只需将OFS='/'
添加到上一个命令:
$ awk '{$NF=""}1' FS='/' OFS='/' file
或使用sed
进行简单替换:
$ sed 's%/[^/]*$%%' file
/dir1/dir11
/dir10/dir103
/dir2/dir21/dir221
答案 2 :(得分:0)
以下是awk
的另一种方式:
awk '{sub(/\/[^/]+$/,"")}1' file
<强>输出:强>
$ cat file
/dir1/dir11/file1
/dir10/dir103/file2
/dir2/dir21/dir221/file3
$ awk '{sub(/\/[^/]+$/,"")}1' file
/dir1/dir11
/dir10/dir103
/dir2/dir21/dir221