我有一个输出类似于下面的文件
<header>
Jacob||Pune||ABC Corp||HR||33000||Lane-4, Opposite school
Jacob||Montreal||Titan||Manager||63000||Lane-3, Near mall
Reese||Nairobi||Reliance||Producer||35000||Sector-A, Behind post office
Travis||Colombo||Warner Bros||Director||7800||Near Jantar Mantar
Jacob||Montreal||Titan||HR||63000||Lane-3, Near mall
<footer>
文件由页眉、页脚和数据行之间组成。
我想从文件中删除重复的行。确定一行是否重复的逻辑是检查col1和col4的组合是否。
如果你看到在列1中有3行值为Jacob,但在col4中有2行值为HR。
所以只有2行(1 &5)是基于col1和col4组合的重复。所以第五行应该被删除
如何编写shell脚本&同样的Python脚本。我想在shell和python脚本的解决方案。
Using awk:
awk -F '|' '/<header>/ { delete map;print;next } { if (map[$1,$7]!="1") { print $0 } map[$1,$7]="1" }' file
将字段分隔符设置为"|"然后哪里",则删除名为map的数组并跳到下一行。在所有其他情况下,检查第1和第7个字段是否作为索引存在于二维数组映射中。如果他们不打印这一行。在所有情况下,将map数组的第一个和第二个索引分别设置为第1个和第7个字段。
输出:
<header>
Jacob||Pune||ABC Corp||HR||33000||Lane-4, Opposite school
Jacob||Montreal||Titan||Manager||63000||Lane-3, Near mall
Reese||Nairobi||Reliance||Producer||35000||Sector-A, Behind post office
Travis||Colombo||Warner Bros||Director||7800||Near Jantar Mantar
<footer>