awk:从完整路径中提取文件名

时间:2014-11-24 06:31:51

标签: bash shell awk scripting

我有一个这样的文件列表:

-rw-r--r--   3 knsdkls users  336207616 2014-11-10 07:15 /hive/some/thing/path/location/data/plants/zombies/Filename.txt

由此,我想提取文件大小和文件名。

我试过awk:

awk '{print $5,$NF}'

给出了:

336207616  /hive/some/thing/path/location/data/plants/zombies/Filename.txt

我想:

336207616  Filename.txt

请指导我。 此外,文件路径中的子目录数不是恒定的。

感谢。

3 个答案:

答案 0 :(得分:3)

这应该做:

awk -F" +|/" '{print $5,$NF}'
336207616 Filename.txt

只需添加/作为分隔符。

答案 1 :(得分:3)

通过awk的split功能。

$ awk '{n=split($NF,a,"/");print $5,a[n]}' file
336207616 Filename.txt

<强>解释

  • split($NF,a,"/")根据分隔符/拆分最后一个字段,并将拆分的部分存储到数组a中。分割部分的总数存储在名为n的变量中。因此,对于这种情况,变量n包含10

  • print $5,a[n]这会打印出第五个字段以及存储在数组a中的最后一个元素

答案 2 :(得分:0)

您可以使用gsub功能

$ awk '{gsub(/.*\//, "", $NF); print $5,$NF}' input
336207616 Filename.txt
  • gsub(/.*\//, "", $NF)删除任何内容.*,直到/为空字符串""

  • print $5,$NF打印第五个和最后一个字段

相关问题