我有xxx.pdb文件:
ATOM 1910 CB SER 128 45.806 50.621 39.840 1.50 9.36
ATOM 1913 OG SER 128 44.538 51.195 39.571 1.50 9.36
ATOM 1915 C SER 128 45.325 48.172 40.360 1.50 9.36
ATOM 1916 O SER 128 45.368 47.955 39.155 1.50 9.36
ATOM 1917 N SER 129 44.953 47.236 41.238 1.00 11.24
ATOM 1919 CA SER 129 44.395 45.938 40.826 1.00 11.24
ATOM 1921 CB SER 129 44.091 45.053 42.031 1.00 11.24
ATOM 1924 OG SER 129 43.483 45.786 43.085 1.00 11.24
当我尝试这段代码时:awk'{if($ 10< 11){$ 9 =“1.50”}; print $ 0}'xxx.pdb
发生了这种情况:
const CustomTabView = ({ router, navigation }) => {
const { routes, index } = navigation.state;
const ActiveScreen = router.getComponentForState(navigation.state);
const routeNav = addNavigationHelpers({
...navigation,
state: routes[index],
});
const routeOptions = router.getScreenOptions(routeNav, 'tabBar');
return (
<View style={styles.container}>
<CustomTabBar
navigation={navigation}
activeRouteName={routes[index].routeName}
icon={routeOptions.tabBarIcon}
/>
<ActiveScreen
navigation={addNavigationHelpers({
...navigation,
state: routes[index]
})}
/>
</View>
);
};
有关如何保留列格式的任何想法吗?
感谢。
答案 0 :(得分:0)
awk 'BEGIN{FS=OFS="\t";}{if($10<11){$9="1.50"};print $0}' xxx.pdb
使用tab作为输入和输出分隔符。
答案 1 :(得分:0)
如果perl
没问题
$ perl -ape 's/\S+(?=\s+\S+$)/1.50/ if $F[-1]<11' xxx.pdb
ATOM 1910 CB SER 128 45.806 50.621 39.840 1.50 9.36
ATOM 1913 OG SER 128 44.538 51.195 39.571 1.50 9.36
ATOM 1915 C SER 128 45.325 48.172 40.360 1.50 9.36
ATOM 1916 O SER 128 45.368 47.955 39.155 1.50 9.36
ATOM 1917 N SER 129 44.953 47.236 41.238 1.00 11.24
ATOM 1919 CA SER 129 44.395 45.938 40.826 1.00 11.24
ATOM 1921 CB SER 129 44.091 45.053 42.031 1.00 11.24
ATOM 1924 OG SER 129 43.483 45.786 43.085 1.00 11.24
\S+(?=\s+\S+$)
使用正向前瞻来匹配最后一个字段
\S+(?=\s+\S+\s*$)
$F[-1]<11
条件检查最后一个字段是否小于11
-ape
选项的详细信息,请参阅http://perldoc.perl.org/perlrun.html#Command-Switches。 -a
选项会自动拆分空格上的输入行并保存到@F
数组答案 2 :(得分:0)
使用GNU awk for gensub():
$ awk '$NF<11{$0=gensub(/\S+(\s+\S+)$/,"1.50\\1",1)}1' file
ATOM 1910 CB SER 128 45.806 50.621 39.840 1.50 9.36
ATOM 1913 OG SER 128 44.538 51.195 39.571 1.50 9.36
ATOM 1915 C SER 128 45.325 48.172 40.360 1.50 9.36
ATOM 1916 O SER 128 45.368 47.955 39.155 1.50 9.36
ATOM 1917 N SER 129 44.953 47.236 41.238 1.00 11.24
ATOM 1919 CA SER 129 44.395 45.938 40.826 1.00 11.24
ATOM 1921 CB SER 129 44.091 45.053 42.031 1.00 11.24
ATOM 1924 OG SER 129 43.483 45.786 43.085 1.00 11.24
无论字段之间的空白区域(标签,空白,等等......),上述内容都会有效。
答案 3 :(得分:0)
我不确定您要完成什么,但是总的来说,要读取xxx.pdb文件,然后输出正确格式的new.pdb文件,这就是我要做的:
awk '{printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11}' < xxx.pdb >> new.pdb
(此代码除了进行复制外实际上不会做任何事情)
如果我想使用变量来更改一个字段(如第二个字段),它看起来像:
VARIABLE=3
awk -v x=$VARIABLE '{printf "%4s%7.0f%3s%6s%2s%4.0f%12.3f%8.3f%8.3f%6.2f%7.2f\n", $1, ($2 + x), $3, $4, $5, $6, $7, $8, $9, $10, $11}' < xxx.pdb >> new.pdb
这会将pdb文件的第二列全部加3。