2014-11-24 117 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