如何使用AWK在字段中添加字母

如何使用AWK在字段中添加字母,awk,Awk,我有一个100K行的gtf文件,我只想在第一个字段中添加一个字母“m”: chr1 HAVANA gene 3073253 3074322 . + . gene_id "ENSMUSG00000102693.1"; gene_type "TEC"; gene_name "4933401J01Rik"; level 2; havana_gene "OTTMUSG00000049935.1"; chr1 HAVANA transcript

我有一个100K行的gtf文件,我只想在第一个字段中添加一个字母“m”:

chr1    HAVANA  gene    3073253 3074322 .       +       .       gene_id "ENSMUSG00000102693.1"; gene_type "TEC"; gene_name "4933401J01Rik"; level 2; havana_gene "OTTMUSG00000049935.1";
chr1    HAVANA  transcript      3073253 3074322 .       +       .       gene_id "ENSMUSG00000102693.1"; transcript_id "ENSMUST00000193812.1"; gene_type "TEC"; gene_name "4933401J01Rik"; transcript_type "TEC"; tr
chr1    HAVANA  exon    3073253 3074322 .       +       .       gene_id "ENSMUSG00000102693.1"; transcript_id "ENSMUST00000193812.1"; gene_type "TEC"; gene_name "4933401J01Rik"; transcript_type "TEC"; transcript
chr1    ENSEMBL gene    3102016 3102125 .       +       .       gene_id "ENSMUSG00000064842.1"; gene_type "snRNA"; gene_name "Gm26206"; level 3;
chr1    ENSEMBL transcript      3102016 3102125 .       +       .       gene_id "ENSMUSG00000064842.1"; transcript_id "ENSMUST00000082908.1"; gene_type "snRNA"; gene_name "Gm26206"; transcript_type "snRNA"; tran
chr1    ENSEMBL exon    3102016 3102125 .       +       .       gene_id "ENSMUSG00000064842.1"; transcript_id "ENSMUST00000082908.1"; gene_type "snRNA"; gene_name "Gm26206"; transcript_type "snRNA"; transcript_n
chr1    HAVANA  gene    3205901 3671498 .       -       .       gene_id "ENSMUSG00000051951.5"; gene_type "protein_coding"; gene_name "Xkr4"; level 2; havana_gene "OTTMUSG00000026353.2";
期望的输出是:

mchr1    HAVANA  gene    3073253 3074322 .       +       .       gene_id "ENSMUSG00000102693.1"; gene_type "TEC"; gene_name "4933401J01Rik"; level 2; havana_gene "OTTMUSG00000049935.1";
mchr1    HAVANA  transcript      3073253 3074322 .       +       .       gene_id "ENSMUSG00000102693.1"; transcript_id "ENSMUST00000193812.1"; gene_type "TEC"; gene_name "4933401J01Rik"; transcript_type "TEC"; tr
mchr1    HAVANA  exon    3073253 3074322 .       +       .       gene_id "ENSMUSG00000102693.1"; transcript_id "ENSMUST00000193812.1"; gene_type "TEC"; gene_name "4933401J01Rik"; transcript_type "TEC"; transcript
mchr1    ENSEMBL gene    3102016 3102125 .       +       .       gene_id "ENSMUSG00000064842.1"; gene_type "snRNA"; gene_name "Gm26206"; level 3;
mchr1    ENSEMBL transcript      3102016 3102125 .       +       .       gene_id "ENSMUSG00000064842.1"; transcript_id "ENSMUST00000082908.1"; gene_type "snRNA"; gene_name "Gm26206"; transcript_type "snRNA"; tran
mchr1    ENSEMBL exon    3102016 3102125 .       +       .       gene_id "ENSMUSG00000064842.1"; transcript_id "ENSMUST00000082908.1"; gene_type "snRNA"; gene_name "Gm26206"; transcript_type "snRNA"; transcript_n
mchr1    HAVANA  gene    3205901 3671498 .       -       .       gene_id "ENSMUSG00000051951.5"; gene_type "protein_coding"; gene_name "Xkr4"; level 2; havana_gene "OTTMUSG00000026353.2";

您可以使用
awk
将字母添加到行的开头。此处
$0
表示整行

echo "hey there" |awk '{$0="m"$0}1'
mhey there
sed
:此处
^
表示行的开始。如果要将更改直接反映到文件中,请使用
-i
-i.bak
标志和
sed
命令

echo "hey there" |sed 's/^/m/'
mhey there

您可以使用
awk
将字母添加到行的开头。此处
$0
表示整行

echo "hey there" |awk '{$0="m"$0}1'
mhey there
sed
:此处
^
表示行的开始。如果要将更改直接反映到文件中,请使用
-i
-i.bak
标志和
sed
命令

echo "hey there" |sed 's/^/m/'
mhey there

使用sed时,这一点更好:

sed -e 's/^/m/' file
添加
-i
以就地更改。(
-i'
适用于macos)

使用
awk
,可以这样做:

awk 'sub(/^/,"m")' file

使用sed时,这一点更好:

sed -e 's/^/m/' file
添加
-i
以就地更改。(
-i'
适用于macos)

使用
awk
,可以这样做:

awk 'sub(/^/,"m")' file

在这里添加1个以上的方式,其中不编辑或添加字符的行

awk '{print "m"$0}' Input_file

在这里添加1个以上的方式,其中不编辑或添加字符的行

awk '{print "m"$0}' Input_file

$0=“m”$0
足够,可以保存
{}和1
。保持
{}
1
不变。删除它们会使代码3字符更简短,但不太清晰,在其他类似情况下会使其不那么健壮,因此这不是一个好的折衷办法,是一个坏习惯。
$0=“m”$0
足够了,可以保存
{}和1
。保持
{}
1
不变。删除它们会使代码3字符更简短,但不那么清晰,并且在其他类似情况下会使代码不那么健壮,因此这不是一个好的折衷办法,也是一个坏习惯。