查找两个文件之间的唯一行
Find unique lines between two files
我有两个非常大的文件(文件 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
检查 AT1G01010.1
时,它没有显示任何共同点。
尝试:
grep -Fvf file2 file1
这将打印与 file2 中的行不完全或部分匹配的行。
grep
为最佳答案。
使用 awk:使用非字母数字字符作为字段分隔符,记住文件 2 的内容,如果文件 1 的第一个字段在文件 2 中没有出现,则打印该行。
gawk -F '[^[:alnum:]]' 'NR==FNR {f2[]; next} !( in f2)' file2 file1
适用于 GNU awk。
或join
join -v1 <(sed 's/^[[:alnum:]]\+/& &/' file1 | sort -k 1,1) <(sort file2) | cut -d " " -f 2-
我有两个非常大的文件(文件 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
检查 AT1G01010.1
时,它没有显示任何共同点。
尝试:
grep -Fvf file2 file1
这将打印与 file2 中的行不完全或部分匹配的行。
grep
为最佳答案。
使用 awk:使用非字母数字字符作为字段分隔符,记住文件 2 的内容,如果文件 1 的第一个字段在文件 2 中没有出现,则打印该行。
gawk -F '[^[:alnum:]]' 'NR==FNR {f2[]; next} !( in f2)' file2 file1
适用于 GNU awk。
或join
join -v1 <(sed 's/^[[:alnum:]]\+/& &/' file1 | sort -k 1,1) <(sort file2) | cut -d " " -f 2-