如何从另一个文本文件中取出文本文件的内容?

时间:2016-07-20 12:19:01

标签: linux bash shell command-line

所以我想把文本文件的内容从另一个文本文件中取出,但是要放在非常大的数据集上

文件1:

ligand1
ligand6
ligand9
ligand4

文件2:

ligand1
ligand9

输出文件

ligand6
ligand4

我一直在使用grep -v -x -f file1.txt file2.txt > new_file.txt 但是在大数据集上它会崩溃

2 个答案:

答案 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替换的前导空格

逻辑很简单: -

  • FNRNR跟踪每个文件中的行,因此当使用多个文件时,NR会在文件中保持活动状态,并且FNR在单个文件(如果第一个输入有5行,第二个输入有10行,那么NR将是1,2,3 ... 15,FNR将是1 ... 5然后1 ... 1)
  • NR==FNRnext表示此部分代码仅适用于file_2,即基本上所有file_2内容都复制到名为awk的{​​{1}}数组中。
  • 然后在file_1上应用
  • list操作,该操作将仅打印file_2中尚不存在的那些行。就是这样!

注意: - 如果额外的前导空格是意外的并被删除,整体命令性能可能会更快一些,因为现在它会删除每一行的空间。

答案 1 :(得分:0)

如果您的文件行的顺序相同,则可以使用comm command

comm -23 file1 file2仅在file1

中打印行
相关问题