【发布时间】:2015-02-12 20:01:59
【问题描述】:
我有几个文件: 文件 1:
1 2 3 4 5 6
ALA, 002, 2fv9, H, N, O6
ALA, 002, 2fv9, N, CA, C20
ALA, 002, 2fv9, N, CA, O6
ALA, 002, 2fv9, N, N, O6
ALA, 00G, 3fuj, N, CB, C2
ALA, 00G, 3fuj, N, CB, C3
ALA, 00G, 3fuj, N, N, O10
ALA, 010, 4ii8, N, C, C1
ALA, 010, 4ii8, N, O, C
文件 2:
003
00G
010
017
我尝试使用带有 grep 的文件 2 从文件 1 中删除行:
grep -vif file2 file1 >outputFile
但是因为有时第 6 列中的值可能与第 2 列中的值相似,所以文件没有按照我希望的方式进行清理。如何通过比较文件 1 中第 2 列的值与文件 2 中的值来删除行?
我也为awk找到了这样的解决方案,但在我的情况下它没有用(文件2包含大约3000个值):
awk -F, '$2 == anyValue' yourFileToFilter
有没有办法修改命令?还是其他解决方案?
更新
我还找到了this solution,它似乎与我需要的非常相似,但它不起作用。
$ awk -F, 'NR==FNR{a[$1];next}!($2 in a)' file2 file1 > file3
但是file3的输出是这样的:
1 2 3 4 5 6
ALA, 002, 2fv9, H, N, O6
ALA, 002, 2fv9, N, CA, C20
ALA, 002, 2fv9, N, CA, O6
ALA, 002, 2fv9, N, N, O6
ALA, 00G, 3fuj, N, CB, C2
ALA, 00G, 3fuj, N, CB, C3
ALA, 00G, 3fuj, N, N, O10
ALA, 010, 4ii8, N, C, C1
ALA, 010, 4ii8, N, O, C
更新:
我刚刚从文件中删除了所有空格,所以现在看起来像:
ALA,002,2fv9,H,N,O6
ALA,002,2fv9,N,CA,C20
ALA,002,2fv9,N,CA,O6
ALA,002,2fv9,N,N,O6
ALA,00G,3fuj,N,CB,C2
ALA,00G,3fuj,N,CB,C3
ALA,00G,3fuj,N,N,O10
而输出仍然是:
ALA,002,2fv9,H,N,O6
ALA,002,2fv9,N,CA,C20
ALA,002,2fv9,N,CA,O6
ALA,002,2fv9,N,N,O6
ALA,00G,3fuj,N,CB,C2
ALA,00G,3fuj,N,CB,C3
ALA,00G,3fuj,N,N,O10
ALA,010,4ii8,N,C,C1
【问题讨论】: