レコードの特定の値に基づいてファイルから重複レコードを削除するフラグの設定

レコードの特定の値に基づいてファイルから重複レコードを削除するフラグの設定

次のレコードを含むファイルがあります(パイプで区切られています)。

SK200-10|ALBUMIN-SK|INS|SEKURE ALBUMIN 2 X 65ML|REAG-IVD|SEKI-PEI|90|14IAG|KIDNEY/LIVER|MD|NA|0|U|MFGPRO|15-May-2014|15-May-2014|MFGPRO|CAPPROD
P/G-PPR|NA-INS|INS|GEWINDEFLASCHE +DECKEL ROT|NON-REAG|ZINSSER|0|NA|NA|NA|NON-REAG|0|U|DM|3-Jun-2014|3-Jun-2014|MFGPRO|UKPROD
P/G-PPR|NA-INS|INS|GEWINDEFLASCHE +DECKEL ROT|NON-REAG|ZINSSER|0|NA|NA|NA|NON-REAG|0|U|DM|3-Jun-2014|3-Jun-2014|DM|QADDB
2898|OTHER-RT|RT|PRINTED MEMBRANE, ADENOVIRUS|NON-REAG|SEKI-SD|60|NA|NA|NA|NA|0|U|MFGPRO|24-Apr-2013|24-Apr-2013|MFGPRO|PACEPROD

パイプで区切られたレコードの最初の値はプロジェクト番号です。 13番目の値はステータスフラグです。最後の値はデータベース名です。

データベースの項目番号に基づいて重複UKPRODレコードを確認しますQADDB。重複が見つかった場合:データベースのステータスフラグ(13番目の値)の値を「X」に変更しますQADDB

たとえば、上記の4つのレコードは次のとおりです。

2番目と3番目のレコードの項目番号は同じです。次に、データベースUKPRODとデータベースの間に存在することを確認しますQADDB。その場合は、データベース内のレコードのステータスフラグを「X」とマークしますQADDB

答え1

UKPROD各製品ID項目の順序がQADDB固定されていない場合は、ファイルを2回読み取って処理する必要があるようです。最初のステップでは、UKPRODデータベース(フィールド#1)内のすべての製品のルックアップテーブルを構築し、2番目の確認では、表示されている各製品が存在することを確認QADDBしますUKPROD。たとえば、考えられる解決策の1つawkは次のとおりです。

awk -F\| '
BEGIN{OFS=FS}; 
NR==FNR {if ($NF=="UKPROD") ukprod[$1]++; next} 
NR!=FNR {if (ukprod[$1] && $NF=="QADDB") $13="X"} 
1' yourfile yourfile

しかし、より良い実装があるかもしれません。物理データベースを参照してUKPRODいる場合は、QADDBフラットファイル処理をテストするよりも実際のデータベースクエリを実行する方が効率的です。

関連情報