AWK
如果字符串只是一个目录,我想用来获取文件名或最后一个文件夹名称。
我有:
awk -F '/' '{print $NF}'
打印最后一列并且:
awk -F '/' '{print $(NF - 1)}
在最后一列之前打印一列。
我怎样才能awk
识别字符串是否只包含目录而没有文件名,在这种情况下,在最后一列之前打印一列。
我的问题是目录可能如下所示:
./folder1/folder2/folder3/
在这种情况下,最后一列将为空。我想awk
识别这一点然后打印folder3
(所以最后一列之前有一列)。
答案1
您可以使用if
或?:
运算符来执行此操作。
awk -F '/' '{print $NF == "" ? $(NF - 1) : $NF}'
awk -F '/' '{if($NF == "") print $(NF - 1); else print $NF}'
答案2
尝试
awk -F/ '{if (length($NF)) print $NF ; else print $(NF-1) ;}'
(虽然我无法测试它)。
答案3
对于 GNU 实用程序,另请参阅:
xargs -rd '\n' basename -a --
输入list.txt
如下:
./folder1/folder2/folder3/
./foo
bar///
/
给出:
folder3
foo
bar
/
zsh
的:t
修饰符(来自csh
)给出""
for"/"
而不是"/"
$ printf '<%s>\n' "${(@)${(f)$(<list.txt)}:t}"
<folder3>
<foo>
<bar>
<>
答案4
在外壳中:
$ basename ./folder1/folder2/folder3/
folder3
分配给变量,basename
与保存路径名的变量一起使用:
filename=$( basename "$pathname" )
效用basename
是标准 POSIX 实用程序。