我试图通过使用在其中运行awk文件的bash脚本来替换满足pdb内特定条件的2列(bash脚本有另一个目的,而awk文件用于代码分离)。当我在没有设置OFS的情况下运行脚本时,带有字符串替换的行没有足够的间距。当我设置OFS="\t"
时,间距太大(相对于未更改的线)。为什么只在执行字符串操作时更改整行的格式?
这是myScript.sh
(some unrelated grep stuff)
awk -f ./myAwkScript.awk 4HKD.pdb.bk > 4HKD.pdb.bk.gen
这是myAwkScript.awk
#!/usr/bin/awk
BEGIN { OFS="\t" }
{ if( $1=="HETATM" && $4=="MSE" ) {
gsub( /MSE/, "MET", $4 );
gsub( /HETATM/, "ATOM", $1 );
}
print;
}
这里是输出的样子,所以你可以看到它对标签的作用
ATOM 127 OE1 GLN A 449 -4.056 11.297 119.695 1.00 20.83 O
ATOM 128 NE2 GLN A 449 -1.948 10.876 120.359 1.00 14.98 N
ATOM 129 N MET A 450 -4.523 16.830 119.280 1.00 14.88 N
ATOM 130 CA MET A 450 -5.537 17.804 118.911 1.00 15.65 C
ATOM 137 N ARG A 451 -3.902 19.530 119.337 1.00 15.80 N
ATOM 138 CA ARG A 451 -3.228 20.800 119.118 1.00 15.54 C
ATOM 139 C ARG A 451 -2.430 20.827 117.826 1.00 16.64 C C
这就是不改变OFS的样子
ATOM 127 OE1 GLN A 449 -4.056 11.297 119.695 1.00 20.83 O
ATOM 128 NE2 GLN A 449 -1.948 10.876 120.359 1.00 14.98 N
ATOM 129 N MET A 450 -4.523 16.830 119.280 1.00 14.88 N
ATOM 130 CA MET A 450 -5.537 17.804 118.911 1.00 15.65 C
ATOM 135 SE MET A 450 -8.866 19.181 121.271 1.00 55.26 SE
ATOM 136 CE MET A 450 -7.749 20.188 122.510 1.00 28.83 C
ATOM 137 N ARG A 451 -3.902 19.530 119.337 1.00 15.80 N
ATOM 138 CA ARG A 451 -3.228 20.800 119.118 1.00 15.54 C
ATOM 139 C ARG A 451 -2.430 20.827 117.826 1.00 16.64 C
答案 0 :(得分:1)
保留未修改的行间距。如果在print语句之前添加$1=$1
,它将会执行。此外,由于您正在寻找完全匹配,因此不需要gsub。顺便说一句,您可以将脚本重写为
BEGIN {
OFS="\t"
}
$1=="HETATM" && $4=="MSE" {
$1="ATOM"
$4="MET"
}
{$1=$1}
1