如何使用awk提取没有文件扩展名的文件名

时间:2016-03-15 10:28:47

标签: awk gawk

我尝试过使用它:

awk 'END{ var=FILENAME; n=split (var,a,/\//); print basename a[n]}'

它正在返回完整路径。

有没有人知道如何在没有延伸的情况下获得结果?

实施例: D:\Test\test.tested.txt - > test

使用awk

3 个答案:

答案 0 :(得分:0)

尝试以下答案。

awk'END {var = FILENAME; n = split(var,a,///);打印[n]}'D:\ Test \ test.tested.txt | awk -F“。” '{print $ 1}'

答案 1 :(得分:0)

以下AWK代码可以满足您的需求:

!uniq[FILENAME]++ {
    aux[++k] = FILENAME;
    next;
}
END {
    for(i = 1; i <= k; i++)
    {
        a = split(aux[i], x, ".");
        print x[1];
    }
}

作为一个班轮:

!uniq[FILENAME]++{aux[++k] = FILENAME; next;} END {for(i = 1; i <= k; i++) {a = split(aux[i], x, "."); print x[1];}} files

next,至少在我的机器上,比从代码中省略它的结果略快。

注意:上面的代码根据您传递给它的文件的顺序为您提供排序输出,也就是说,如果您为其提供文件file01.txt file02.txt data01.txt,它们将按相同的顺序排序:< / p>

file01
file02
data01

相同代码的较短版本是:

!filename[FILENAME]++ {
        next;
}
END {
        for(i in filename)
        {
                a = split(i, x, ".");
                print x[1];
        }
}

作为一个班轮:

!filename[FILENAME]++ {next;} END {for(i in filename) {a = split(i, x, "."); print x[1];}} files

结果在任何意义上都没有排序。由用户对其进行排序。

答案 2 :(得分:0)

$ echo "D:\Test\test.tested.txt" | 
  awk '{n=split($1,a,"\\"); split(a[n],b,"."); print b[1]}'

test

为您的脚本

... END{n=split(FILENAME,a,"\\"); split(a[n],b,"."); print b[1]}'