我想用以下代码修改 $2:
cat file | awk '{printf "%.15f\n", $2 = 1-$2}' > new_file
Run Code Online (Sandbox Code Playgroud)
代码完成它的工作,它打印 15 位小数并计算 1-n。但是,它不会打印其他列。如果我尝试使用以下代码执行此操作,它会打印它,但会打印到另一行:
cat file | awk '{printf "%.15f\n", $2 = 1-$2; print $0}' > new_file
Run Code Online (Sandbox Code Playgroud)
我的原始文件:
752566 0.883928571428571 1 rs3094315 0
752721 0.765873015873016 1 rs3131972 0
752894 0.883928571428571 1 rs3131971 0
753541 0.268849206349206 1 rs2073813 0
Run Code Online (Sandbox Code Playgroud)
输出:
752566 0.116071 1 rs3094315 0
0.116071428571429
Run Code Online (Sandbox Code Playgroud)
所需的输出(列的顺序无关紧要):
752566 1 rs3094315 0 0.116071428571429
Run Code Online (Sandbox Code Playgroud)
您可以使用sprintf
将新值打印到格式化字符串,并将其分配为 的新值$2
:
$2 = sprintf("%.15f",1-$2)
Run Code Online (Sandbox Code Playgroud)
然后只需打印整个(修改后的)记录:
$ awk '{$2 = sprintf("%.15f",1-$2); print}' file
752566 0.116071428571429 1 rs3094315 0
752721 0.234126984126984 1 rs3131972 0
752894 0.116071428571429 1 rs3131971 0
753541 0.731150793650794 1 rs2073813 0
Run Code Online (Sandbox Code Playgroud)