首页 > 解决方案 > 在文本文件的第一行之前插入文件名 - 文件扩展名

问题描述

~$ awk -i inplace -v ORS='\r\n' 'FNR==1{print FILENAME}1' *

这很好用。

但我想排除文件扩展名。

.... sub(/\.[^.]+$/, "", FILENAME) ...

我不知道如何混合它。还是有其他方法?

我应该如何解决它?

标签: bashawk

解决方案


第一个解决方案(不使用新变量并编辑 FILENAME 变量本身):您能否根据您显示的示例尝试以下操作。我建议在单个文件上运行该程序一次,然后在所有文件上运行,因为您正在进行就地更新,一旦您对该文件的更新感到满意,然后在所有文件上运行您的命令。

awk -i inplace -v ORS='\r\n' 'FNR==1{sub(/\.[^.]+$/,"",FILENAME);print FILENAME}1' Input_file

或者

awk -i inplace -v ORS='\r\n' '
FNR==1{
match(FILENAME,/.*\./)
print substr(FILENAME,RSTART,RLENGTH-1)
}
1' Input_file


第二种解决方案(为 FILENAME 使用变量,如果需要,我们可以稍后使用文件名):或者不要更改FILENAME默认变量,而是创建一个包含其文件名的临时变量,以便我们以后需要使用文件名我们可以使用它的程序,尝试如下:

awk -i inplace -v ORS='\r\n' '
FNR==1{
file=FILENAME
sub(/\.[^.]+$/,"",file)
print file
}
1' Input_file

或者我们也可以使用match如下函数:

awk -i inplace -v ORS='\r\n' '
FNR==1{
file=FILENAME
match(file,/.*\./)
print substr(file,RSTART,RLENGTH-1)
}
1' Input_file

注意:更改Input_file*或您的文件扩展名以将其传递给您的awk程序。


推荐阅读