在awk中正斜杠替换

时间:2014-01-01 09:31:25

标签: awk

我开始学习awk。在这里,我试图在一个目录中生成所有歌曲专辑的格式化列表,该目录中有许多子目录(年份范围)。但最后一次gsub替换并没有删除正斜杠。我知道可以使用像sed这样的bash实用程序使用很多方法来完成它。但是我想知道为什么这不能用于awk。

lst=$(mktemp)
find . | grep -vE "\.mp3|\.sh|\."$ > $lst #| tee $lst
gawk -F"/" '{
if(NF>2){
gsub(".tar.gz","",$3)
gsub(".zip","",$3)
gsub(".ZIP","",$3)
gsub("/","",$3)
print $3
}
else
print$0
}' $lst
exit 0

3 个答案:

答案 0 :(得分:2)

您使用“/”作为字段分隔符,因此$3永远不会有“/”。

答案 1 :(得分:2)

您可以按照以下方式简化脚本(我的观点):

find . | awk '
!/(\.mp3|\.sh|\.)$/ {
    n=split($0,a,"/")
    if(n>2){
        sub(".tar.gz","",a[3])
        sub(".zip","",a[3])
        gsub(".ZIP","",a[3])
        print a[3]
    }
    else
        print $0
}'

答案 2 :(得分:1)

这很好用:

echo "test/more" | awk '{gsub("/","",$0)}1'
testmore

因此,您的代码中可能存在其他错误。

发布输入数据,以及您对输出数据的喜好。

尝试使用正则表达式。

echo "test/more" | awk '{gsub(/\//,"",$0)}1'
testmore

gsub(regexp, replacement [, target])