2011-01-22 2 views
1

Я написал небольшой скрипт, используя команду awk «split», чтобы получить текущее имя каталога.awk split question

эхо $ PWD

Мне нужно заменить «8» с количеством жетонов в результате операции разделения. // Если PWD =/home/username/bin. Я пытаюсь получить «bin» в пакет.

package="`echo $PWD | awk '{split($0,a,"/"); print a[8] }'`" 
echo $package 

Можете ли вы сказать мне, что я могу заменить вместо 'напечатать [8], чтобы получить скрипт работает для любого пути каталога?

-Sachin

ответ

5

Вам не нужно AWK для этого. Если вы хотите всегда последний реж в пути просто сделать:

#!/bin/sh 

cur_dir="${PWD##*/}/" 
echo "$cur_dir" 

выше имеет дополнительное преимущество, не создавая никаких подоболочки и/или вилки на внешние исполняемые файлы. Это все родной синтаксис оболочки POSIX.

+0

try: '$ cd /; echo $ {PWD ## * /} ' –

+0

Или' basename $ (dirname $ PWD) ' – dmckee

+0

@Tomasz достаточно справедлив. Простое добавление «/» должно прояснить это. – SiegeX

3

Вы можете использовать print a[length(a)], но это лучше, чтобы избежать расщепления и использовать пользовательские поля сепаратора и $NF:

echo $PWD | awk -F/ '{print $NF}' 

Но в этом конкретном случае вам лучше использовать basename:

basename "$PWD" 
1

Другие ответы являются лучшей заменой для выполнения функции, которую вы пытаетесь выполнить. Однако, здесь есть конкретный ответ на ваш вопрос:

package=$(echo $PWD | awk '{n = split($0,a,"/"); print a[n] }') 
echo "$package" 

split() возвращает число результирующих элементов.

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