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

How to extract file name without file extention using awk

我试过用这个:

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

它正在返回完整路径。

有谁知道没有扩展名怎么得到结果?

示例: D:\Test\test.tested.txt --> test

使用 awk?

试试下面的答案。

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

下面的 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,它们将按照相同的顺序排序:

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

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

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

test

为您的脚本

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