Подстрока и обратный индекс с awk - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть путь, который я получаю с помощью команды pwd , мне нужно изменить время выполнения пути в моем сценарии оболочки.Допустим, у меня есть / var / www / cgi-script , я должен изменить его в / var / www / etc .Я пытаюсь получить последний индекс "/" , взять подстроку, а затем добавить и т. Д. .Я пробовал с awk несколько раз, но, похоже, не могу найти решение.Есть ли способ использовать обратный индекс?

path=`pwd`;
char="/"
pathindex=`awk -v a="$path" -v b="$char" 'BEGIN { print index(a,b)}'`

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012

Выезд dirname :

$ pwd
/var/www/cgi-script
$ echo $PWD
/var/www/cgi-script
$ echo `dirname $PWD`/etc
/var/www/etc
3 голосов
/ 03 апреля 2012

@ AndersLindahl имеет правильный ответ. Для этого в awk:

newpath=$(awk -F $char -v OFS=$char '{$NF="etc"; print}' <<< "$path")
0 голосов
/ 28 июля 2012

Моя ситуация была немного другой, я уже в коде - уже слишком поздно делать новую ФС. У меня есть имя человека с неизвестным количеством слов, но последнее слово - это его фамилия, и оно должно быть заключено в "/"

  a=split(prsn,x," ")  # Split into 'x' based on a space, 'a'=number of words
  prsn=""              # reset variable to null
  for (j=1;j<a;j++) {  # loop through and concatenate all but the last word
                     prsn=sprintf("%s %s",prsn,x[j])
                    }
   prsn=substr(prsn,2) # we got an extra space in there at the beginning - lose it
   prsn=sprintf("%s /%s/",prsn,x[a])  # format the final name
   print "1 NAME " prsn # print it
...