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

答え2

私はJoinコマンドを使用します

結合・説明 同じ結合フィールドがある入力行の各ペアについて、標準出力に 1 行を書き込みます。デフォルトの結合フィールドは最初にスペースで区切られます。 FILE1またはFILE2(両方ではない)が-の場合、標準入力を読み込みます。

参加する

次のウェブサイトからここをクリック csvファイルの例を見つけることができます。

関連情報