ルックアップテーブルを使用してcsvファイルのn番目の列を置き換える

ルックアップテーブルを使用してcsvファイルのn番目の列を置き換える

次のcsvファイル(a.csv)があります(何千もの行があります)。

NMS_NE,,,,,,,,,,,,,,,,,,,,,,,
D,NE Name,IP Address,Site Name,Product UPEI,Product Name,Product Model,NE Status,Serial Number,SW Major Release,SW Minor Release,SW Patch Release,Manufacturing Date,Installation Date ,Into Service Date ,Licensed System ID,License Key,Decommissioning Date,Description,,,,,
X,a155,1.1.1.155,,,,audi,,,4.8,abc48.677,,,,,,,,,,,,,
X,b145,1.1.1.145,,,,bmw,,,4.3,abc43.489,,,,,,,,,,,,,
X,c198,1.1.1.198,,,,vw,,,4.4,abc44.779,,,,,,,,,,,,,
...

次のクエリCSVテーブル(b.csv)があります(何百もの行があります)。

model,product name
bmw,1.16
audi,a3
vw,golf
...

私がやりたいことは、a.csvから「製品モデル」(列7)の値を取得し、b.csvファイルで値を確認することです。 「製品モデル」の値(a.csvの)が「モデル」の値(b.csvの)と同じ場合は、「製品名」を見つけて、b.csvの一致する「モデル」の値に基づいて「製品」を置き換えます。 a.csv「モデル」はb.csvの「製品名」に関連付けられています。したがって、出力ファイルは次のようになります。

NMS_NE,,,,,,,,,,,,,,,,,,,,,,,
D,NE Name,IP Address,Site Name,Product UPEI,Product Name,Product Model,NE Status,Serial Number,SW Major Release,SW Minor Release,SW Patch Release,Manufacturing Date,Installation Date ,Into Service Date ,Licensed System ID,License Key,Decommissioning Date,Description,,,,,
X,a155,1.1.1.155,,,,a3,,,4.8,abc48.677,,,,,,,,,,,,,
X,b145,1.1.1.145,,,,1.16,,,4.3,abc43.489,,,,,,,,,,,,,
X,c198,1.1.1.198,,,,golf,,,4.4,abc44.779,,,,,,,,,,,,,
...

単純なawkコマンドでこれをどのように実行できますか?

ベストアンサー1

次のことを試すことができますawk

awk 'BEGIN { FS = OFS = ","; } FNR == NR { x[$1] = $2; next; } { if ($7 in x) { $7 = x[$7]; } } 1' b.csv a.csv

セクションでは、BEGINフィールド区切り記号FSと出力フィールド区切り記号OFS,FNR == NRは最初のファイル()を読み取るときに真のパターンであるため、列のキーと列の値で配列を作成b.csvします。前のセクションでは、2番目のファイルを読み、その列が配列のキーとして存在することを確認し、その場合は値を変更しました。x$1$2$7

おすすめ記事