使用awk的子串和反向索引

时间:2012-04-03 08:25:50

标签: bash shell indexing awk substring

我有一个用 pwd 命令检索的路径,我必须在shell脚本中修改该路径运行时。对于istance,假设我有 / var / www / cgi-script ,我必须在 / var / www / etc 中修改它。我要做的是检索“/”的最后一个索引,取一个子字符串,然后添加 etc 。我尝试了几次 awk ,但我似乎无法找到解决方案。有没有办法使用反向索引?

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

3 个答案:

答案 0 :(得分:4)

结帐dirname

$ pwd
/var/www/cgi-script
$ echo $PWD
/var/www/cgi-script
$ echo `dirname $PWD`/etc
/var/www/etc

答案 1 :(得分:3)

@AndersLindahl有正确的答案。要在awk中执行此操作:

newpath=$(awk -F $char -v OFS=$char '{$NF="etc"; print}' <<< "$path")

答案 2 :(得分:0)

我的情况有点不同,我已经在代码中了 - 做一个新的FS为时已晚。我有一个人名不明确的单词,但最后一个字是他们的姓,需要被“/”包围

  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