awkを使用して複数のファイルの拡張子を削除してヘッダーにファイル名を追加する

awkを使用して複数のファイルの拡張子を削除してヘッダーにファイル名を追加する

以下のように3つの列を持つテキストファイルがあります。

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

3番目の列の拡張子の前にファイル名を追加したいと思います。

私が望む出力は次のとおりです。

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

関連情報