Diff 是一个很好的工具来显示两个文件之间的变化。但是如何显示两个文本文件的相似性(同时忽略差异)?
即样本输入:
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
Run Code Online (Sandbox Code Playgroud)
伪输出(类似这样):
@@ 2,3
=Hello World
Run Code Online (Sandbox Code Playgroud)
仅对两个文件进行排序并使用 comm 是不够的,因为在这种情况下,行信息会丢失。
如果我有两个文件(单列),一个像这样(file1)
34
67
89
92
102
180
blue2
3454
Run Code Online (Sandbox Code Playgroud)
和第二个文件(file2)
23
56
67
69
102
200
Run Code Online (Sandbox Code Playgroud)
如何找到两个文件(交集)中共有的元素?此示例中的预期输出是
67
102
Run Code Online (Sandbox Code Playgroud)
请注意,每个文件中的项目(行)数不同。数字和字符串可以混合使用。它们可能不一定要排序。每个项目只出现一次。
根据以下一些答案进行时间检查。
# generate some data
>shuf -n2000000 -i1-2352452 > file1
>shuf -n2000000 -i1-2352452 > file2
#@ilkkachu
>time (join <(sort "file1") <(sort "file2") > out1)
real 0m15.391s
user 0m14.896s
sys 0m0.205s
>head out1
1
10
100
1000
1000001
#@Hauke
>time (grep -Fxf "file1" "file2" > out2)
real 0m7.652s
user 0m7.131s
sys 0m0.316s
>head out2
1047867
872652
1370463
189072 …Run Code Online (Sandbox Code Playgroud) 我有这个 sed 脚本,当我的 OTU 表中找到文本文件中列出的物种时,我正在删除 OTU 表中的整行。
我现在拥有但不起作用的脚本如下,但我无法使其工作。无论如何,如果您能尽快帮助我,将不胜感激。
(阅读每一行,在我的表中搜索并删除行,infile)
for i in $(cat /my/path/species.txt); do
sed -i '/"$i"/d' /my/path/ITS.OTU.table.tsv
done
Run Code Online (Sandbox Code Playgroud)
非常感谢