我有一个这样的文件列表:
-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
请指导我。 此外,文件路径中的子目录数不是恒定的。
感谢。
答案 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
打印第五个和最后一个字段