har*_*on4 15 sorting bash optimization sed comm
我有两个没有分拣的文件有一些共同点.
FILE1.TXT
Z
B
A
H
L
Run Code Online (Sandbox Code Playgroud)
FILE2.TXT
S
L
W
Q
A
Run Code Online (Sandbox Code Playgroud)
我用来删除公共行的方式如下:
sort -u file1.txt > file1_sorted.txt
sort -u file2.txt > file2_sorted.txt
comm -23 file1_sorted.txt file2_sorted.txt > file_final.txt
Run Code Online (Sandbox Code Playgroud)
输出:
B
H
Z
Run Code Online (Sandbox Code Playgroud)
问题是我想保留file1.txt的顺序,我的意思是:
期望的输出:
Z
B
H
Run Code Online (Sandbox Code Playgroud)
我试过的一个解决方案是循环读取file2.txt的所有行:
sed -i '/^${line_file2}$/d' file1.txt
Run Code Online (Sandbox Code Playgroud)
但如果文件很大,性能可能会很糟糕.
per*_*eal 18
你可以只用grep(-v用于反转,-f用于文件).从input1那里的Grep线与以下任何一行都不匹配input2:
grep -vf input2 input1
Run Code Online (Sandbox Code Playgroud)
得到:
Z
B
H
Run Code Online (Sandbox Code Playgroud)
Ken*_*ent 16
grep或awk:
awk 'NR==FNR{a[$0]=1;next}!a[$0]' file2 file1
Run Code Online (Sandbox Code Playgroud)