AWK работает с переменными, а не с файлами - PullRequest
0 голосов
/ 24 августа 2011

Я прочитал этот пост , но не могу понять, как сделать то, что мне нужно. У меня есть переменная, которая является путем, поэтому я хотел бы иметь имя файла (последний столбец, если я разделю на /).

Итак, я попробовал несколько комбинаций, таких как:

#!/bin/sh

source=$1
target=$2


for i in "$source"/*
do
    $name = awk -F/ -v '{ print $NF }' $i
    echo $name
done

Но безуспешно, кто-нибудь может мне помочь? Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 24 августа 2011

Немного неясно ... Вы хотите извлечь имя файла из пути?

для получения пути без имени файла используйте dirname:

$ dirname /usr/bin/foo.bar
/usr/bin

чтобы получить имя файла без пути, используйте basename

$ basename /usr/bin/foo.bar
foo.bar

Использование awk:

$ echo $a 
/usr/bin/foo.bar  

$ echo $a | awk -F/ '{print $NF}' 
foo.bar
1 голос
/ 24 августа 2011

вы можете просто использовать оболочку для извлечения имен файлов без внешних инструментов

for file in $source/*
do
  echo ${file##*/}
done
0 голосов
/ 24 августа 2011

Если вы хотите извлечь имя файла, используйте базовое имя, как предложил Фредрик.Вот решение:

#!/bin/sh

source=$1
target=$2

for i in "$source"/*
do
    name=$(basename $i)
    echo $name
done

Это решение работает, но в нем есть ошибка: если в каталоге или файле содержится пробел в его имени, значит, он работает неправильно.Вот мое пересмотренное решение:

#!/bin/sh

source=$1
target=$2

pushd "$source" >/dev/null 2>&1
for name in *
do
    echo $name
done
popd >/dev/null 2>&1

Обратите внимание, что я использую pushd / popd для входа в исходный каталог и из него.Поскольку я уже нахожусь в исходном каталоге, мне не нужно называть basename.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...