awk使用管道输入

时间:2012-10-09 09:09:14

标签: awk grep

我对AWK有一个(非常)基本的了解,我已经尝试了几种方法来做到这一点但是所有打印的行都比我想要的要多:

我在file.1中有10行:

chr10   234567
chr20   123456
...
chrX    62312

我想移动到大写并匹配file.2的前两列,所以下面的第一行与上面的第二行相匹配,但我不想得到第二行以下与第三行匹配的位置但是不是chr,我不希望下面的第一行与上面的第一行匹配。

CHR20   123456    ...   234567 
CHR28   234567    ...   62312

我有:

$ cat file.1 | tr '[:lower:]' '[:upper:]' | <grep? awk?>

并且很想知道如何继续。我曾经使用过一个简单的grep - 之前但是file.1的第二列在搜索文件中匹配得更多,所以我返回了数百行。我想在前两列匹配(它们对应file.2中的前两列)。

希望对你足够清楚,期待你的回答=)

1 个答案:

答案 0 :(得分:3)

如果文件按第一列排序,则可以执行以下操作:

join -i file.1 file.2 ¦ awk '$3==$2{ $3=""; print}'

如果它们没有排序,请先排序。

-i标志表示忽略大小写。

如果第一列中有多个具有相同字段的行,则无效。为了完成这项工作,你需要更复杂的东西