awk分裂问题

时间:2011-01-22 22:13:19

标签: awk split

我写了一个小脚本,用awk'split'命令获取当前目录名。

echo $ PWD

由于拆分操作,我需要将'8'替换为令牌数。 //如果PWD = / home / username / bin。我想把“bin”打包成包。

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

你能否告诉我用什么代替'print a [8]'来使脚本适用于任何目录路径?

-Sachin

3 个答案:

答案 0 :(得分:5)

你不需要awk。如果你总是想要路径中的最后一个dir:

#!/bin/sh

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

以上具有不为外部二进制文件创建任何子壳和/或叉的附加好处。它是所有原生POSIX shell语法。

答案 1 :(得分:3)

您可以使用print a[length(a)],但最好避免拆分并使用自定义字段分隔符和$NF

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

但在特定情况下,您应该使用basename

basename "$PWD"

答案 2 :(得分:1)

其他答案是更好的替代品来执行您想要完成的功能。但是,以下是您问题的具体答案:

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

split()返回结果元素的数量。