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

+0

@FenderBender. Просто измените разделитель на '' + '' одно или больше места и '/'. Затем будут разделены все поля, используя пробел или косую черту. Последнее поле будет после последнего '/'. Вы можете добавить много разделителей, таких как '-F 'a | g |" '(a, g или пробел), или как этот' -F "[ag]" ' – Jotne

+0

Помните: это работает только в том случае, если никакое другое поле содержит косые черты - которые должны иметь место в этом случае. – ua2b

0

Вы можете использовать функцию gsub

$ awk '{gsub(/.*\//, "", $NF); print $5,$NF}' input 
336207616 Filename.txt 
  • gsub(/.*\//, "", $NF) subtitutes ничего, .* до / с пустой строкой ""

  • print $5,$NF печатает пятое и последнее поле

3

Через awk's 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

Смежные вопросы