2014-11-24 155 views
1

解压文件名我有这样一个文件的列表:AWK:从完整路径

-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 

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

谢谢。

回答

2

这应该这样做:

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

只需添加/作为分隔符。

+0

由于在最后一个元素! 你能解释它是如何工作的吗? – FenderBender 2014-11-24 06:41:17

+0

@FenderBender它只是将分隔符更改为'“+”'一个或多个空格和'/'。然后这将使用空格或斜线划分所有字段。最后一个字段会在最后一个'/'之后。您可以添加许多分隔符,例如'-F“a | g |”'(a,g或空格),或者像这样'-F“[ag]”'' – Jotne 2014-11-24 06:43:46

+0

有一点要记住:只有在没有其他字段包含斜杠 - 在这种情况下应该保留。 – ua2b 2014-11-24 06:51:25

0

可以使用gsub功能

$ awk '{gsub(/.*\//, "", $NF); print $5,$NF}' input 
336207616 Filename.txt 
  • gsub(/.*\//, "", $NF) subtitutes什么,.*直到/与空字符串""

  • print $5,$NF版画第五和最后场

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