Как напечатать "\t" в 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 ответ

Решение

Ну у вас есть 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" одна решит вашу проблему, не пробовал, слишком много вкладок, чтобы исправить.)

Другие вопросы по тегам