如何从另一个文件 2 中删除出现在文件 1 上的行保持空行?
How to remove the lines which appear on file 1 from another file 2 KEEPING empty lines?
我知道在其他问题中,您解决了“如何从另一个文件 2 中删除文件 1 上出现的行”的第一部分:
comm -23 file1 file2
和 grep -Fvxf file1 file2
但在我的例子中,我用空行分隔我需要保留的数据集,例如:
文件 1:
A
B
C
D
E
F
G
H
I
文件 2
A
D
F
I
我想要的结果:
B
C
E
G
H
解决方案可以在bash或csh中。
谢谢
使用awk
请尝试关注一次。
awk 'FNR==NR{arr[[=10=]];next} !NF || !([=10=] in arr)' file2 file1
说明:为以上代码添加详细说明。
awk ' ##Mentioning awk program from here.
FNR==NR{ ##Checking if FNR==NR which will be TRUE when file2 is being read.
arr[[=11=]] ##Creating array with index of here.
next ##next will skip all further statements from here.
}
(!NF || !([=11=] in arr)) ##If line is empty OR not in arr then print it.
' file2 file1 ##Mentioning Input_file names here.
我知道在其他问题中,您解决了“如何从另一个文件 2 中删除文件 1 上出现的行”的第一部分:
comm -23 file1 file2
和 grep -Fvxf file1 file2
但在我的例子中,我用空行分隔我需要保留的数据集,例如:
文件 1:
A
B
C
D
E
F
G
H
I
文件 2
A
D
F
I
我想要的结果:
B
C
E
G
H
解决方案可以在bash或csh中。
谢谢
使用awk
请尝试关注一次。
awk 'FNR==NR{arr[[=10=]];next} !NF || !([=10=] in arr)' file2 file1
说明:为以上代码添加详细说明。
awk ' ##Mentioning awk program from here.
FNR==NR{ ##Checking if FNR==NR which will be TRUE when file2 is being read.
arr[[=11=]] ##Creating array with index of here.
next ##next will skip all further statements from here.
}
(!NF || !([=11=] in arr)) ##If line is empty OR not in arr then print it.
' file2 file1 ##Mentioning Input_file names here.