我有一个很大的文本文件,想要将值从第 7 列 (BETA) 划分到第 8 列 (SE),并在表末尾创建一个包含结果的新列(第 11 列)。问题是第 7 列中的某些值超过了零并且为负数。
SNP CHR BP A1 AX A1_FREQ BETA SE P OBS_CT
rs10875231 1 100000012 T G 0.405 -0.0456807 0.02260471 0.04335677 4400
rs6678176 1 100000827 C T 0.383 0.02553138 0.02287662 0.2645817 4400
rs78590530 1 100000948 A G 0.016 0.171376 0.08757958 0.05035017 4400
rs149636485 1 100001060 A G 0.004 -0.03363731 0.1819208 0.8529224 4400
rs116216467 1 100001233 C T 0.043 -0.06690947 0.05683414 0.238941 4400
答案1
该错误是由第一行包含非数字字符串引起的。您可以这样排除它:
NR!=1 { $11 = $7/$8 }
1
现在,如果您认为第 8 列中可能有零,则需要检查 $8 是否非零。您可以向模式添加条件:
NR!=1 && $8!=0 { $11 = $7/$8 }
1
或者,if
在操作中添加一个:
{ if (NR!=1 && $8!=0) $11 = $7/$8; print }
我不明白为什么负值是一个问题。
答案2
awk 'BEGIN{print "SNP CHR BP A1 AX A1_FREQ BETA SE P OBS_CT"}NR>1{$11=$7-$8;print $0}' filename
output
SNP CHR BP A1 AX A1_FREQ BETA SE P OBS_CT
rs10875231 1 100000012 T G 0.405 -0.0456807 0.02260471 0.04335677 4400 -0.0682854
rs6678176 1 100000827 C T 0.383 0.02553138 0.02287662 0.2645817 4400 0.00265476
rs78590530 1 100000948 A G 0.016 0.171376 0.08757958 0.05035017 4400 0.0837964
rs149636485 1 100001060 A G 0.004 -0.03363731 0.1819208 0.8529224 4400 -0.215558
rs116216467 1 100001233 C T 0.043 -0.06690947 0.05683414 0.238941 4400 -0.123744