awk разделенный вопрос - PullRequest
1 голос
/ 23 января 2011

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

эхо $ PWD

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

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

Подскажите, пожалуйста, что я могу заменить вместо «print a [8]», чтобы скрипт работал для любого пути к каталогу?

-Sachin

Ответы [ 3 ]

5 голосов
/ 23 января 2011

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

#!/bin/sh

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

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

3 голосов
/ 23 января 2011

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

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

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

basename "$PWD"
1 голос
/ 23 января 2011

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

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

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

...