仅提取制表符分隔表中具有重复字符串的行

仅提取制表符分隔表中具有重复字符串的行

我有一个很长的数据列表,其中有 10 个制表符分隔的列。前两列是 ID。我想检索选定 ID 的行。

我首先重命名选定的 ID,以便每个 ID 都以comp-.然后我尝试提取第 1 列和第 2 列中都存在选定 ID 的行。

文件:

comp-AA11232.1  GR55896.1
AB55887.1   comp-FR87559.1
comp-AC11232.1  comp-AE55888.1
comp-AC66742.1  comp-AD87559.1

期望的输出:

comp-AC11232.1    comp-AE55888.1
comp-AC66742.1    comp-AD87559.1

我正在使用sed -n '/comp\-.*\tcomp\-.*/p' file.输出文件是所有符合条件的文件,但不幸的是,输出文件中遗漏了一些具有相同条件的行。

不确定这里发生了什么。任何想法?或者在这种情况下有更好的 grep/awk/sed 方法吗?

答案1

awk -F'\t' '$1 ~/^comp-/ && $2 ~/^comp-/' infile

相同,但从参数传递模式:

awk -F'\t' -v pat='comp-' '$1 ~"^" pat && $2 ~"^" pat' infile

或作为字符串匹配进行比较并仍然从参数传递:

awk -F'\t' -v str='comp-' 'index($1, str)==1 && index($2, str)==1' infile

也可以看看如何找到与模式匹配的文本?以获得其他匹配选项。

答案2

珀尔

perl -MList::MoreUtils=all -F'\t' -lane '
  print if all { /^comp-/ } @F[0,1];
' file

sedGNU版本

$ sed -n '/^comp-.*\tcomp-/p' file

相关内容