Замените NULL на NA в столбце с помощью awk - PullRequest
2 голосов
/ 05 мая 2020

У меня есть файл: allele_freq.vcf. Это первые 10 строк в файле

NC_000001.9   144148243  rs2236566     G  T    .  .  .  AN:AC  2806   236
NC_000001.9   146267105  rs1553119693  T  G    .  .  .  AN:AC  33978  26317
NC_000001.10  13832431   rs1553119928  T  C    .  .  .  AN:AC  1220   0
NC_000001.10  74439690   rs1553119957  A  C    .  .  .  AN:AC  1220   0
NC_000001.11  10498      rs1338146081  G  A,T  .  .  .  AN:AC  2072   0      0
NC_000001.11  10509      rs1262211809  G  A    .  .  .  AN:AC  2072   0
NC_000001.11  10527      rs1246002416  C  T    .  .  .  AN:AC  2072   0
NC_000001.11  10531      rs1293328578  C  G    .  .  .  AN:AC  2072   0

Для столбца 12 я хотел бы заменить пустые ячейки на NA

Я пробовал

awk -F='' '$12== "" {$12="NA"; print; next} {print}' OFS='' allele_freq.vcf

Что дает мне это

NC_000001.9   144148243  rs2236566     G  T    .  .  .  AN:AC  2806   236    NA
NC_000001.9   146267105  rs1553119693  T  G    .  .  .  AN:AC  33978  26317  NA
NC_000001.10  13832431   rs1553119928  T  C    .  .  .  AN:AC  1220   0      NA
NC_000001.10  74439690   rs1553119957  A  C    .  .  .  AN:AC  1220   0      NA
NC_000001.11  10498      rs1338146081  G  A,T  .  .  .  AN:AC  2072   0      0NA
NC_000001.11  10509      rs1262211809  G  A    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10527      rs1246002416  C  T    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10531      rs1293328578  C  G    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10534      rs1486704209  A  G    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10535      rs1184627952  G  C    .  .  .  AN:AC  2072   0      NA

К 0 в строке 5 прикреплен «NA».

Я хочу примерно следующее:

NC_000001.9   144148243  rs2236566     G  T    .  .  .  AN:AC  2806   236    NA
NC_000001.9   146267105  rs1553119693  T  G    .  .  .  AN:AC  33978  26317  NA
NC_000001.10  13832431   rs1553119928  T  C    .  .  .  AN:AC  1220   0      NA
NC_000001.10  74439690   rs1553119957  A  C    .  .  .  AN:AC  1220   0      NA
NC_000001.11  10498      rs1338146081  G  A,T  .  .  .  AN:AC  2072   0      0
NC_000001.11  10509      rs1262211809  G  A    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10527      rs1246002416  C  T    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10531      rs1293328578  C  G    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10534      rs1486704209  A  G    .  .  .  AN:AC  2072   0      NA
NC_000001.11  10535      rs1184627952  G  C    .  .  .  AN:AC  2072   0      NA

Спасибо за ваша помощь.

Ответы [ 3 ]

1 голос
/ 05 мая 2020
awk '{print $0 (NF<12 ? OFS "NA" : "")}' file
0 голосов
/ 05 мая 2020

В зависимости от вывода вашего кода и структуры формата с фиксированной шириной, после $11 остается пробел, даже если $12 пуст. Следовательно:

$ awk '{sub(/ +$/,"&NA")}1' file

Частичный вывод:

...
NC_000001.10  74439690   rs1553119957  A  C    .  .  .  AN:AC  1220   0      NA
NC_000001.11  10498      rs1338146081  G  A,T  .  .  .  AN:AC  2072   0      0
NC_000001.11  10509      rs1262211809  G  A    .  .  .  AN:AC  2072   0      NA
...
0 голосов
/ 05 мая 2020

Это работает, за исключением количества места перед NA. При необходимости отрегулируйте:

awk '{if (NF<12) print $0 " NA"; else print $0}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...