0

我对 AWK 有(非常)基本的了解,我尝试了几种方法,但都打印出比我想要的多得多的行:

我有 10 行file.1

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匹配更多,所以我得到了数百行返回。我只想匹配前 2 列(它们对应于 中的前 2 列file.2)。

希望这对您来说足够清楚,期待您的回答=)

4

1 回答 1

4

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

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

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

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

如果第一列中有多行具有相同字段,那将不起作用。要完成这项工作,您需要一些更复杂的东西

于 2012-10-09T09:28:25.660 回答