awk - 打印最后一列或最后一列(如果最后一个为空)

awk - 打印最后一列或最后一列(如果最后一个为空)

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 实用程序

相关内容