Использование printf с AWK для правильного форматирования моего вывода

Или comm -13 cmp1 cmp2, и у вас нет никаких запутанностей, связанных с csh -.

0
17.04.2021, 02:21
3 ответа

Вы просто пропустили запятую после строки формата, например.

awk -F'[:_\t]' '{ printf "%s\t%4.0f\t%4.0f\t%s\n", "chr"$1, $2-1, $2, $1":"$2"_"$3"_"$4 }' file
#                                                ^
#                                                |
#                                                this one
2
28.04.2021, 22:52

Используя утилиту awk , мы можем сделать следующее:

printf -v fmt '%s\t' '%s' '%4.0f' '%4.0f' '%s\n'
awk -F '\t' -v fmt="${fmt%?}" '
{
  split($1, a, /[:_]/)
  f1 = "chr" a[1]
  f2 = (f3 = a[2])-1
  f4 = sprintf("%4.0f", f3)
  sub(/:[^_]+/, ":"f4, $1)
  printf fmt, f1, f2, f3, $1
}
' file
0
28.04.2021, 22:52

Я вообще не могу воспроизвести вашу проблему, но если она действительно существует, это может вам помочь:

$ cat tst.awk
BEGIN { OFS="\t"; OFMT="%d" }
{
    split($1,f,/[:_]/)
    print "chr"f[1], f[2]-1, f[2], $1
}

$ awk -f tst.awk file
chr10   100000624       100000625       10:100000625_A_G
chr10   100000644       100000645       10:100000645_A_C
chr10   100002463       100002464       10:100002464_C_T
chr10   100003241       100003242       10:100003242_G_T
chr10   100003303       100003304       10:100003304_A_G
chr10   10000337        10000338        10:10000338_C_T
chr10   100003515       100003516       10:100003516_A_G
chr10   100003784       100003785       10:100003785_C_T
chr10   100004359       100004360       10:100004360_A_G
chr10   100004440       100004441       10:100004441_C_G

Если формат %dне делает то, что вам нужно, но %4.0fделает, просто измените OFMT="%d"на OFMT="%4.0f".

То, что вы упомянули о том, что первый столбец смещается вниз, а четвертый столбец усекается, вероятно, означает, что у вас есть окончания строк DOS во входных данных, см.https://stackoverflow.com/questions/45772525/why-does-my-tool-output-overwrite-itself-and-how-do-i-fix-it.

2
28.04.2021, 22:52

Теги

Похожие вопросы