我知道有几个这样的主题已经得到解答,但我在这个主题中找到的所有代码都没有解决我的问题。所以这是描述。
我有两个文件的问题。第一个文件由308370行组成,另一个由308369行组成。两个文件都需要具有相同的长度和相同的顺序。我已经订购了它们。您可以比较两个文件的列是第2列。因此,为了更容易处理,我将第二列从两个文件中提取到单独的临时文件中。
我尝试了几件事。我比较了两个临时文件并搜索了空行但结果总是没有。我发现没有区别,但显然必须有所不同。这很烦人。希望你能帮助我。
这就像临时文件一样:
rs12345
rs34567
rs45679567
rs345635
这是我已经尝试过的bash-code:
comm file1 file2
grep -v -F -x -f file1 file2
awk 'FNR==NR{a[$0]++;next}!a[$0]' file1 file2
diff file_1 file_2 | grep '^>' | cut -c 3-
最后我想删除文件1中但不在文件2中的这一行。 感谢您提前帮助我。
最佳, 托比
答案 0 :(得分:1)
如果我理解正确的话,
#!/bin/sh
awk -v file=0 -v offset=0 '
file == 0 {
data[FNR] = $0 # read first file into memory, both
key[FNR] = $2 # lines and isolated keys
}
file == 1 {
while(key[FNR + offset] != $2) { # When parsing the second file,
offset = offset + 1 # skip lines in the first that do not
# match keys in the second
if(FNR + offset > length(key)) {
exit
}
}
print data[FNR + offset] # when key is found, print corresponding
} # line from the first file
ENDFILE {
file = file + 1 # set flag when first file is over.
}' longer.txt shorter.txt
应该做的伎俩。给出两个文件
foo 1 bar
foo 2 bar
foo 3 bar
foo 4 bar
和
qux 1 xyzzy
qux 2 xyzzy
qux 4 xyzzy
打印
foo 1 bar
foo 2 bar
foo 4 bar
答案 1 :(得分:1)
如果您可以使用GUI工具,那么我建议您meld
。易于使用,它显示了额外的空间等细微差别。否则,您可以使用diff
。查看diff
的手册页以获取更多信息。
答案 2 :(得分:0)
首先再次感谢您的帮助。 我的帖子后几分钟我解决了我的问题。 我很抱歉偷你的时间。
当我对文件进行排序时,我看到一行是空行。所以我删除了这条线,就是这样。但我对此有点好奇,因为我证明文件是否有空行。为此我用过:
grep -v '^$' input > output
似乎这不起作用。 我真的很抱歉,但我肯定会尝试你的代码@Wintermute。 它看起来很棒。
最佳, 托比