$ awk '{ print $0, "("$2"-"$8") + ("$4"-"$10")"}' inputfile
X 2.63766751981802 Y 1.68326762144808 Z 0 XX 2.63577810877244 YY 1.67475013544567 ZZ 0 (2.63766751981802-2.63577810877244) + (1.68326762144808-1.67475013544567)
Если ваши данные разделены табуляцией -, замените двоеточие на табуляцию:
tr : $'\t' < file
Использует bash ANSI -C Quoting
Использование Миллера(https://github.com/johnkerl/miller)и запуск
mlr --tsv nest --explode --values --across-fields --nested-fs ":" -f "Chromosome Position" \
then rename "Chromosome Position_1",Chromosome,"Chromosome Position_2",Position input.tsv >output.tsv
у вас будет
+------+--------+------------+-----------+
| Gene | qval | Chromosome | Position |
+------+--------+------------+-----------+
| ACE | 0.3748 | 1 | 234689650 |
| NOS | 0.2 | 2 | 374896578 |
| BRCA | 0.345 | 12 | 897655323 |
+------+--------+------------+-----------+
Что не так с вашим первым подходом (за исключением того, что вы заменили двоеточие пробелом вместо<TAB>
)? Попробуйте адаптацию:
awk '{sub (/:/, OFS)} 1' OFS="\t" file