通过使用 awk 删除多个文件中的扩展名将文件名添加到标头中

通过使用 awk 删除多个文件中的扩展名将文件名添加到标头中

我有如下所示的包含三列的文本文件。

6:85406127 T:A 0.44 
6:85406139 T:C 0.00
6:85406165 C:G 0.33

我想在第三列的扩展名之前添加文件名。

我想要的输出将是这样的:

CHR:POS REF:ALT Filename

6:85406127 T:A 0.44
6:85406139 T:C 0.0
6:85406165 C:G 0.33

然后我使用了这个命令:

for i in *.txt; do awk 'BEGIN{print "CHR:POS REF:ALT "${i%.*}"" {print}' $i ; done

但收到此错误消息

awk: cmd. line:1: BEGIN{print "CHR:POS REF:ALT "${i%.*}"" {print}
awk: cmd. line:1:                                ^ syntax error 

答案1

如果您想打印正在awk使用的文件名FILENAME,但问题是,该项目未加载到 -block 中BEGIN,因此您必须在第一条记录上执行此操作:

awk 'NR == 1 { print "Header-Col1","Header-Col2",FILENAME}
     NR>=1 { print }' input_file

"\n"如果需要,在标题行 ( ) 之后添加换行符。

答案2

解决方案:

for i in *.txt ; do awk -v fname="${i%.*}" 'NR == 1 { print  "CHR:POS"," ","REF:ALT"," ",fname,"\n" } 
               NR >=1 { print }' $i > "${i%.*}_header.txt" ; done

相关内容