我有一个数据文件,看起来像:
file1:
c1.212 3.4 90
c1.011 4.4 33
c2.09432 7.7 76
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c4.1211001 1.2 11
c4.1111222 1.2 10
c4.0000011 99 76
c5.123 11 01
c5.113 11 01
...
第二个文件如下所示:
c1.212
c3.2223
c3.0911
c5.113
...
正如您在文件1中根据第一列的信息所看到的,有5个组(c1,c2,c3,c4和c5),每个组具有不同数量的子集(例如c1有2个子集,而c2有一个子集) ,但在第二个文件中有3个组(c1,c3和c5)。我想要的是,如果在file2中观察到任何组,则保留其所有子集的文件1,而在文件2(c1和c4)中未观察到的那些组,则将其所有子集从file1中删除。因此输出应如下所示:
output:
c1.212 3.4 90
c1.011 4.4 33
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c5.123 11 01
c5.113 11 01
...
任何建议将不胜感激。(实际文件有超过45,000行)
有很好的awk
主食
awk -F. 'NR==FNR {a[$1]++; next} $1 in a' file2 file1
c1.212 3.4 90
c1.011 4.4 33
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c5.123 11 01
c5.113 11 01
或者,假设这一组标识符(c1
,c2
等)不其他地方出现在文件中,你可以使用cut
提取的标识符,然后grep
在你的第一个文件,例如它们匹配
$ cut -d. -f1 file2 | grep -Fwf- file1
c1.212 3.4 90
c1.011 4.4 33
c3.0911 8.3 83
c3.1121 4.3 23
c3.2223 2.2 22
c3.1211 2.2 12
c5.123 11 01
c5.113 11 01
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句