首页 > 解决方案 > 阻止 AWK 用空格替换制表符

问题描述

我正在尝试修改由空格和制表符分隔的文件中每一行的第一个字符。

在以下示例中,前 3 个空格是制表符,接下来的两个空格是空格。

cat example.gtf
1      havana  gene    11896 14409 .
1      havana  gene    12613 12227 .

我想m在每一行的第一个值前面加上一个,如下所示......期望的输出.gtf。这可以通过awk '$1="m"$1' example.gtf > desiredOutput.gtf

cat desiredOutput.gtf
m1      havana  gene    11896 14409 .
m1      havana  gene    12613 12227 .

但是,awk 将前三个制表符替换为空格,从而破坏了输出文件的格式。如何防止 awk 将制表符更改为空格?

标签: awk

解决方案


$ cat file
1       havana  gene    11896 14409 .
1       havana  gene    12613 12227 .

按照简单性、清晰性和性能的降序排列:

$ awk '{print "m"$0}' file
m1      havana  gene    11896 14409 .
m1      havana  gene    12613 12227 .

$ awk '{$0="m"$0} 1' file
m1      havana  gene    11896 14409 .
m1      havana  gene    12613 12227 .

$ awk 'BEGIN{FS=OFS="\t"} {$1="m"$1} 1' file
m1      havana  gene    11896 14409 .
m1      havana  gene    12613 12227 .

推荐阅读