Max*_*den 0 awk grep duplicate-removal
我收集了以下文件:
20130304;114137911;8051;somevalue1 20130304;343268;7591;NA 20130304;379612;7501;somevalue2 20130304;343380;7591;somevalue8 20130304;343380;7591;somevalue9 20130304;343212;7591;NA 20130304;183278;7851;somevalue3 20130304;114141486;8051;somevalue5 20130304;114143219;8051;somevalue6 20130304;343247;7591;NA 20130304;379612;7501;somevalue2 20130308;343380;7591;NA
这是一个;包含4列的分隔文件.但是,第2列和第3列的组合必须是唯一的.由于这个数据集有数百万行,我正在寻找一种有效的方法来获得每个重复的第一次出现.因此,我需要部分匹配第2列和第3列的组合,然后选择第一列.
预期结果应该是:
20130304;114137911;8051;somevalue1 20130304;343268;7591;NA 20130304;379612;7501;somevalue2 20130304;343380;7591;somevalue8 20130304;343380;7591;somevalue9 #REMOVED 20130304;343212;7591;NA 20130304;183278;7851;somevalue3 20130304;114141486;8051;somevalue5 20130304;114143219;8051;somevalue6 20130304;343247;7591;NA 20130304;379612;7501;somevalue2 #REMOVED 20130308;343380;7591;NA #$REMOVED
我自己做了几次尝试.第一个是:
grep -oE "\;(.*);" orders_20130304to20140219_v3.txt | uniq
但是,这仅选择第2列和第3列并删除所有其他数据.此外,它没有考虑稍后发生的匹配.我可以通过添加来修复它sort,但我不想排序.
另一种尝试是:
awk '!x[$0]++' test.txt
这不需要任何排序,但匹配整行.
我认为第二次尝试很接近,但需要更改才能只查看第二列和第三列而不是整行.有谁知道如何融入这个?
干得好:
awk -F';' '!a[$2 FS $3]++' file
Run Code Online (Sandbox Code Playgroud)
测试您的数据:
kent$ awk -F';' '!a[$2 FS $3]++' f
20130304;114137911;8051;somevalue1
20130304;343268;7591;NA
20130304;379612;7501;somevalue2
20130304;343380;7591;somevalue8
20130304;343212;7591;NA
20130304;183278;7851;somevalue3
20130304;114141486;8051;somevalue5
20130304;114143219;8051;somevalue6
20130304;343247;7591;NA
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |