【发布时间】:2014-03-05 17:17:07
【问题描述】:
我有一个包含以下列的输入文件:
'-' CT C>CCT
'-' TA G>GTA
'-' TAT A>ATAT
基本上,我正在尝试测试第 3 列中箭头后面的最后 n 个字符是否与第 2 列的内容相同,其中 n 是箭头前后字母的长度差。
到目前为止,我尝试过的所有操作似乎都引发了错误。我的想法如下:
awk -F"\t" '{split($3,x,">");
{n_base=length(x[2])-length(x[1]);
ins={$x[2]: -$n_base};
if($2 == $ins) {print $0}}'
有什么想法吗?
提前致谢。
【问题讨论】:
-
ins={$x[2]: -$n_base}是一种 shell 语言结构。 awk 不是 shell,awk 是一个可以从 shell 调用的工具,就像cut、grep等一样。此外,您可以通过命名变量来获取 awk 变量的值,就像在 C 中一样,而不是通过粘贴$在它前面,就像在 shell 中一样。获取阿诺德·罗宾斯 (Arnold Robbins) 的书Effective Awk Programming, Third Edition。