awk - フィールドを比較してファイルを操作する

awk - フィールドを比較してファイルを操作する

次の2つのファイルがあります。

section_ne.csv

NE_section,,,,,,,,,,,,,,,,,,,,,,,
D,NE Name,IP Address,Site Name,en Product Legacy Code,en Product Legacy Revision,Product Model,NE Status,company Serial Number,company SW Major Release,company SW Minor Release,company SW Patch Release,Manufacturing Date,Installation Date ,Into Service Date ,Licensed System ID,Licensed Key,Decommissioning Date,Description,,,,,
X,ts,1.1.1.26,,,,Linux,,,9.6.02,356349,,,,,,,,A,,,,,
X,ts_I,1.1.1.26,,,,Linux,,,9.6.02,356272,,,,,,,,I,,,,,
X,ts_O,1.1.1.26,,,,Linux,,,9.6.01,348219,,,,,,,,O,,,,,
X,ts_S,1.1.1.26,,,,Linux,,,9.6.02,356272,,,,,,,,S,,,,,
X,1.1.88.83,1.1.88.83,,,,O-M,,,4.8,a7gpaa48.766,,,,,,,,,,,,,
X,is180,10.5.5.180,,,,N-D,,,5.2,a6gpaa52.604,,,,,,,,,,,,,
X,is171,10.5.5.171,,,,N-F,,,5.4,a6gpaa54.431,,,,,,,,,,,,,
X,is174,10.5.5.174,,,,N-F,,,5.4,a6gpaa54.431,,,,,,,,,,,,,
X,Detected_at_10.5.5.106,10.5.5.106,,,,N-B,,,5.5,a6gpaa55.568,,,,,,,,,,,,,
X,is112,10.5.5.112,,,,N-A,,,5.5,a6gpaa55.574,,,,,,,,,,,,,
X,is107,10.5.5.107,,,,N-A,,,5.6,a6gpaa56.561,,,,,,,,,,,,,
X,172.29.7.227,172.29.7.227,,,,N-D,,,5.6,a6gpaa56.175,,,,,,,,,,,,,
X,Detected_at_10.5.5.121,10.5.5.121,,,,N-A,,,5.6,a6gpaa56.462,,,,,,,,,,,,,
X,is172,10.5.5.172,,,,N-F,,,5.6,a6gpaa56.561,,,,,,,,,,,,,
X,is179,10.5.5.179,,,,N-D,,,5.6,a6gpaa56.561,,,,,,,,,,,,,
X,is181,10.5.5.181,,,,N-D,,,5.6,a6gpaa56.453,,,,,,,,,,,,,
X,eyup,10.5.5.91,,,,C-A,,,5.6,a6gpaa56.557,,,,,,,,,,,,,
...

find.csv

Patch_release,Build
5.7.02,
5.7.01e,57.345
5.7.01,57.324
5.7.00c,57.161
5.7.00a,57.160
5.7,57.145
5.6.02d,
5.6.02b,56.574
5.6.02a,56.562
5.6.02,56.561
5.6.01j,56.463
5.6.01g,56.476
5.6.01f,
5.6.01e,56.488
5.6.01c,56.462
5.6.01b,56.453
5.6.01a,56.452
5.6.01,56.439
5.6.00a,56.157
5.6,56.153
5.5.02h,
5.5.02g,55.598
...

私は次のことをしたいと思います:

  • このファイルをawkと比較する
  • section_ne.csv(会社ソフトウェアマイナーバージョン)の11番目のフィールドにlookup.csv(2列目)にリストされているバージョンが含まれている場合は、lookup.csvテーブルから一致するPatch_release値を取得し、section_ne.csvドキュメントを更新してください。
  • この Patch_release 値を section_ne.csv (会社ソフトウェアパッチバージョン) のフィールド 12 に入れます。

たとえば、

NE_section,,,,,,,,,,,,,,,,,,,,,,,
D,NE Name,IP Address,Site Name,en Product Legacy Code,en Product Legacy Revision,Product Model,NE Status,company Serial Number,company SW Major Release,company SW Minor Release,company SW Patch Release,Manufacturing Date,Installation Date ,Into Service Date ,Licensed System ID,Licensed Key,Decommissioning Date,Description,,,,,
...
    X,is107,10.5.5.107,,,,N-A,,,5.6,a6gpaa56.561,,,,,,,,,,,,,
...

このエントリは lookup.csv ファイルの次のエントリと一致します。

5.6.02,56.561

これにより、section_ne.csvファイルの関連項目が次のように更新されます。

X,is107,10.5.5.107,,,,N-A,,,5.6,a6gpaa56.561,5.6.02,,,,,,,,,,,,

ベストアンサー1

これはあなたの考えでしたか?簡単な汚れの例:

$ sort -V -t , -k 1 lookup.csv > lookup_sorted.csv 
$ sort -V -t , -k 10 section_ne.csv > section_ne_sorted.csv 
$ join -1 10 -2 1 -t , section_ne_sorted.csv lookup_sorted.csv 
5.6,X,172.29.7.227,172.29.7.227,,,,N-D,,,a6gpaa56.175,,,,,,,,,,,,,,56.153
5.6,X,is181,10.5.5.181,,,,N-D,,,a6gpaa56.453,,,,,,,,,,,,,,56.153
5.6,X,Detected_at_10.5.5.121,10.5.5.121,,,,N-A,,,a6gpaa56.462,,,,,,,,,,,,,,56.153
5.6,X,eyup,10.5.5.91,,,,C-A,,,a6gpaa56.557,,,,,,,,,,,,,,56.153
5.6,X,is107,10.5.5.107,,,,N-A,,,a6gpaa56.561,,,,,,,,,,,,,,56.153
5.6,X,is172,10.5.5.172,,,,N-F,,,a6gpaa56.561,,,,,,,,,,,,,,56.153
5.6,X,is179,10.5.5.179,,,,N-D,,,a6gpaa56.561,,,,,,,,,,,,,,56.153
join: file 2 is not in sorted order
join: file 1 is not in sorted order

おすすめ記事