Или comm -13 cmp1 cmp2
, и у вас нет никаких запутанностей, связанных с csh -.
Вы просто пропустили запятую после строки формата, например.
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
Используя утилиту 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
Я вообще не могу воспроизвести вашу проблему, но если она действительно существует, это может вам помочь:
$ 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.