2012-10-09 50 views
0

使用输入我有AWK的(非常)基本的了解,我已经试过这样做的几种方法,但所有打印出更行,比我想:awk中从管道

我有10个行file.1

chr10 234567 
chr20 123456 
... 
chrX 62312 

我想要移动到大写和匹配file.2第2列,所以下面第一行匹配第二线之上,但我不希望得到下面一个符合上面的位置,第三行第二线,但不是字符,我不希望下面的第一行匹配上面的第一行。

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

我:

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

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

希望这就是足够清晰的你,期待你的答案=)

+0

你是什么意思的'搜索匹配'?请根据您的标准添加符合您的样本的线条。 – 2012-10-09 09:11:56

+0

完成,我甚至在提问有关cmd行的问题时比我使用的还要糟糕= P – bruce01

+0

我没有得到你想要的东西......你能简单地粘贴file1,file2和预期的输出吗? – Kent

回答

3

如果文件是由第一列排序,你可以这样做:

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

如果他们不排序,排序他们第一。

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

如果在第一列中有多个具有相同字段的行,则这将不起作用。为了使这项工作,你需要更复杂的东西

+0

谢谢乔纳森,那完美的工作。 – bruce01

+1

@ user1495853:如果这适用于您,您应该通过单击此答案左侧的打勾来接受它。 – Steve

+0

对不起,它确实工作,很多谢谢,新的stackoverflow;) – bruce01