我有两个非常大的文件(文件1和文件2),文件1有很多行和列,为了简单起见,我粘贴了第1列。我想只打印文件1中唯一的那些行。
文件1:
AT1G01010.1
AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
AT1G01046.1
AT1G01050_ID7
文件2:
AT1G01010
AT1G01046
AT1G01050
输出:
AT1G01020_P1
AT1G01020_P2
AT1G01040.2
AT1G01040_P1
我在Ubuntu中尝试了comm
命令,但它检查完整模式时没有工作。因此,当它尝试使用AT1G01010.1
检查AT1G01010
时,它不会显示任何常见内容。
答案 0 :(得分:2)
尝试:
grep -Fvf file2 file1
这将打印与file2中的行没有完全或部分匹配的行。
答案 1 :(得分:0)
grep
是最好的答案。
使用awk:使用非字母数字字符作为字段分隔符,记住文件2的内容,如果在file2中没有看到file1的第一个字段,则打印该行。
gawk -F '[^[:alnum:]]' 'NR==FNR {f2[$1]; next} !($1 in f2)' file2 file1
使用GNU awk。
或join
join -v1 <(sed 's/^[[:alnum:]]\+/& &/' file1 | sort -k 1,1) <(sort file2) | cut -d " " -f 2-