如何在awk中打​​印“\ t”

时间:2018-04-25 08:58:35

标签: awk

我需要读取一个文件,忽略一些行并用他们的制表符分隔符作为字符串打印我想要的行,即 输入行: -

1 7579643 . C <DEL> . . DP=417;DPADJ=1471;RO=417;AO=1054;AF=0.716519374575119;END=7579660;SVLEN=17;SVTYPE=DEL;SVCONF=HIGH . .

输出行: -

1\t7579643\t.\tC\t<DEL>\t.\t.\tDP=417;DPADJ=1471;RO=417;AO=1054;AF=0.716519374575119;END=7579660;SVLEN=17;SVTYPE=DEL;SVCONF=HIGH\t.\t.

这可以用awk实现吗?

目前我有这个: -

awk 'BEGIN{FS="\n"}{gsub(/\t/, /\\t/); if ($1 !~/#/) print $1}' test.vcf

但是我的输出字符串没有正确显示分隔符: -

1075796430.0C0<DEL>0.0.0DP=417;DPADJ=1471;RO=417;AO=1054;AF=0.716519374575119;END=7579660;SVLEN=17;SVTYPE=DEL;SVCONF=HIGH0.0.

很高兴以普通bash或sed等方式进行。

1 个答案:

答案 0 :(得分:1)

嗯,你有FS="\n"我在这种情况下不理解它,因此可能会关闭这个但是:

$ awk 'BEGIN{FS="\t";OFS="\\t"}{$1=$1;print}' file

说明:

awk '
BEGIN {       
    FS="\t"    # tab separated
    OFS="\\t"  # \t string separated
}
{
    $1=$1      # rebuild the record
    print      # output
}' file

(也许单独更改FS="\n"可以解决您的问题,但没有尝试,需要修复太多标签。)