Linux grep - 查找包含相同数字的行

Linux grep - 查找包含相同数字的行

我目前正在处理蛋白质中原子距离的文件。距离要么在相同残基内,要么在不同残基之间。我想知道是否有一种方法可以对包含相同残基中的距离的所有行进行排序/查找,以便我可以轻松地将这些行复制到一个新文件中以单独使用。下面显示了该文件的一个示例,既针对同一残基内的距离 (164),又针对不同残基之间的距离 (38、124)。

样本输入为:

assign (resid 164 and name CD ) (resid 164 and name CE ) 4.6 2.6 2.6 ! 
assign (resid 38 and name CE* ) (resid 124 and name CA ) 4.6 2.6 2.6 ! 

...输出应该是:

assign (resid 164 and name CD ) (resid 164 and name CE ) 4.6 2.6 2.6 ! 

因为两个条目之间的残基是相同的。

答案1

要在一行中匹配相同的模式两次,您可以使用反向引用到捕获组

前任。

grep -E '(resid [0-9]+ ).*\1'

或者

grep -E 'resid ([0-9]+ ).*resid \1'

答案2

awk '$3 == $9' yourfile

应显示具有匹配残基的行。更改==!=以获得具有不匹配残基的行。

答案3

厚颜无耻地扩展@ottomeister代码以包括将输出分组到特定文件

awk '{if ($3 <= $9) {print $0 >> $3"."$9".resid"} else { print $0 >> $9"."$3".resid"}}' data

相关内容