所以我想把文本文件的内容从另一个文本文件中取出,但是要放在非常大的数据集上
文件1:
ligand1
ligand6
ligand9
ligand4
文件2:
ligand1
ligand9
输出文件
ligand6
ligand4
我一直在使用grep -v -x -f file1.txt file2.txt > new_file.txt
但是在大数据集上它会崩溃
答案 0 :(得分:2)
您可以使用简单的awk
逻辑: -
$ awk 'NR==FNR{list[$0];next} !($0 in list)' file_2 <(tr -d ' ' <file_1)
ligand6
ligand4
然后可以将其写入某个临时路径中的文件,例如,
awk 'NR==FNR{list[$0];next} !($0 in list)' file_2 <(tr -d ' ' <file_1) > /tmp/newFile
file_1上的tr
命令用于去除导致awk
替换的前导空格
逻辑很简单: -
FNR
和NR
跟踪每个文件中的行,因此当使用多个文件时,NR
会在文件中保持活动状态,并且FNR
在单个文件(如果第一个输入有5行,第二个输入有10行,那么NR
将是1,2,3 ... 15,FNR
将是1 ... 5然后1 ... 1)NR==FNR
和next
表示此部分代码仅适用于file_2,即基本上所有file_2内容都复制到名为awk
的{{1}}数组中。list
操作,该操作将仅打印file_2中尚不存在的那些行。就是这样!注意: - 如果额外的前导空格是意外的并被删除,整体命令性能可能会更快一些,因为现在它会删除每一行的空间。
答案 1 :(得分:0)
如果您的文件行的顺序相同,则可以使用comm
command:
comm -23 file1 file2
仅在file1