unix - 在保留格式的同时替换列中的值
问题描述
我有一个看起来像这样的文件(.pdb):
ATOM 1 BB MET A 1 4.171 16.195 -18.221 1.00 0.00 B
ATOM 2 SC1 MET A 1 0.852 15.586 -20.418 1.00 0.00 S
ATOM 3 BB GLU A 3 9.285 12.756 -18.753 1.00 22.00 B
我想将第 11 列中的值替换为另一个 txt 文件中的值,如下所示:
4.61
4.80
15.81
输出应该是:
ATOM 1 BB MET A 1 4.171 16.195 -18.221 1.00 4.61 B
ATOM 2 SC1 MET A 1 0.852 15.586 -20.418 1.00 4.80 S
ATOM 3 BB GLU A 3 9.285 12.756 -18.753 1.00 15.81 B
我用 awk 尝试了以下
awk ' NR==FNR{a[NR]=$0; next}{$11=a[FNR]}1' file2.txt fil1.pdb > output.pdb
但不保留格式。我得到了这样的东西:
ATOM 1 BB MET A 1 4.171 16.195 -18.221 1.00 4.61 B
ATOM 2 SC1 MET A 1 0.852 15.586 -20.418 1.00 4.80 S
ATOM 3 SC1 GLU A 3 9.285 12.756 -18.753 1.00 15.81 B
替换时保留格式的任何建议?
解决方案
这是一个应该适用于非 gnu 版本的 awk:
awk ' NR == FNR {
a[NR] = $0
next
}
match($0, /^[[:blank:]]*([^[:blank:]]+[[:blank:]]+){10}/) {
s = substr($0, RLENGTH+1)
sub(/[^[:blank:]]+/, "", s)
print substr($0, 1, RLENGTH) a[FNR] s
}' file2.txt fil1.pdb
ATOM 1 BB MET A 1 4.171 16.195 -18.221 1.00 4.61 B
ATOM 2 SC1 MET A 1 0.852 15.586 -20.418 1.00 4.80 S
ATOM 3 BB GLU A 3 9.285 12.756 -18.753 1.00 15.81 B
推荐阅读
- javascript - 入门问题,在动画上用文本覆盖 Div
- python - 带有 sklearn 的 ML:KNeighborRegressor 拟合函数卡在大数据库上
- javascript - 如何将数据插入Json文件?
- accessibility - aria-live 被其他标签打断,如何阻止这种行为?
- r - `lmer` 中回归系数的置信区间
- pandas - 为什么简单的 pandas 数组函数中的 dtype 从 int64 更改为 float64?
- python - Pycharm 对嵌套类属性缺乏 Intelisense
- react-google-maps - react-google-maps StandaloneSearchBox 设置特定的国家限制?
- java - 从结果集中创建 CSV 块
- xcode10 - 如何在 Xcode 10 中停靠对象库