Grep找出满足特定条件的“大多数”行

职员

我有1600万行数据文件,正在将其用作回归测试/重播工具的一部分。数据有很多相似的行。我想从文件中删除许多类似的行

文件格式

|DATA|DATA|DATE|3|DATA|DATA
|DATA|DATA|DATE|3|DATA|DATA
|DATA|DATA|DATE|3|DATA|DATA
|DATA|DATA|DATE|2|DATA|DATA
|DATA|DATA|DATE|4|DATA|DATA
|DATA|DATA|DATE|2|DATA|DATA
|DATA|DATA|DATE|2|DATA|DATA

该文件为1600万行,带有2、3或10的第4个元素的行组成1300万行。第2个元素,第2个,第3个或第10个元素的行彼此相似,因此我想从文件中删掉它们的90%。为了获得一些消息类型的计数,我能够运行此命令以找到第4个元素为3的所有行

awk -F"|" '$4=="3"' capture.txt > out.txt 

那条线是我用来确定最常见消息的可重复性的方式,但是它并没有帮助我删节那些记录。我真正想要的是能够创建一个新文件,其中包括

    (All records where pipe deliminated 4th element is not 2, 3 or 10) +
    (1 out of every 10 records where the 4th element is 2, 3 or 10)

通过文件一次可以做到这一点吗?我想我可以创建两个文件,将第4个元素分别为2、3或10的记录与具有不同第4个元素的记录分开。然后,我可能会从一个文件中删除第10行,然后将它们组合在一起。但我真正的偏好是一次性完成此操作并保留原始文件顺序。

有什么想法吗?

卡拉法

也许随机方法会更好。

awk -F'|' 'BEGIN{srand()} $5~/^(2|3|10)$/{if(rand()<0.1) print; next}1' file

将有大约10%的机会打印这些行,您可以设置一个种子使其也可重复。请注意,您应该检查的是第五字段,而不是第四字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章