キーで検索された2つのファイルをマージして最後に追加

キーで検索された2つのファイルをマージして最後に追加

両方のファイルのデータを1つのファイルにマージし、列に興味深い値のみを追加します。検索キーは、3列のファイル#1のUIDです。また、UIDが重複して空白行がある場合は、削除/省略する必要があります。

どんな説明方法でも読んでみるのもいいと思います:)

FILE #1:
-----------------
SVCSTO1,dbsrv01,600507600C80012F4000000000000012
SVCSTO1,dbsrv01,600507600C80012F4000000000000014
SVCSTO1,dbsrv02,600507600C80012F40000000000001C0
SVCSTO1,dbsrv02,600507600C80012F40000000000001C1
SVCSTO1,dbsrv01,600507600C80012F40000000000001C2
SVCSTO1,winsrv01,600507600C80012F40000000000001C3

FILE #2:
-----------------
239,dbsrv01_01_T2,4398046511104,600507600C80012F40000000000001C2
240,winsrv01_03_T2,4398046511104,600507600C80012F40000000000001C3
10,dbsrv01_01_T0,0,8589934592000,600507600C80012F4000000000000014
237,dbsrv02_01_T1,4398046511104,600507600C80012F40000000000001C0
238,dbsrv02_02_T2,4398046511104,600507600C80012F40000000000001C1
8,dbsrv01_02_T0,8589934592000,600507600C80012F4000000000000012


DESIRED OUTPUT:
--------------------
SVCSTO1,dbsrv01,600507600C80012F4000000000000012,8589934592000,T0
SVCSTO1,dbsrv01,600507600C80012F4000000000000014,8589934592000,T0
SVCSTO1,dbsrv02,600507600C80012F40000000000001C0,4398046511104,T1
SVCSTO1,dbsrv02,600507600C80012F40000000000001C1,4398046511104,T2
SVCSTO1,dbsrv01,600507600C80012F40000000000001C2,4398046511104,T2
SVCSTO1,winsrv01,600507600C80012F40000000000001C3,4398046511104,T2

以下の例のようにデータ出力を操作できますが、配列を構築したり、複数の出力を1つにまとめたりする方法は経験がありません。

# for i in `cat file1.log | awk -F"," '{print $3}'` ; do cat file2.log | grep $i | awk -F"," '{print $3/1024^3" GB"}'; done
8000 GB
...

ベストアンサー1

これはsed入力を与えられた出力にのみ変換します。必要に応じて拡張できます。

sed -E '/^[0-9]/{s/.*_(.*)(,.*),(.*)/\3\2,\1/;H;d;};G;s/,(.*)\n.*\n\1(,[0-9]*,T[0-9]*).*/\1\2/' file2 file1

これらのタスクのアイデアは常に同じです。まず、2番目のファイルを読み取り、予約済みスペースにルックアップテーブルを作成し、次にルックアップテーブルをベースファイルの各行に追加します。

詳細:

  • このパターンは/^[0-9]/数字で始まる行を扱うので、中のすべての内容が単純に{}実行されます。file2
  • s/.*_(.*)(,.*),(.*)/\3\2,\1/2番目のファイルから必要な部分だけが必要な順序で抽出されます。
  • H;d予約済みスペースのルックアップテーブルに追加し、行を削除します。その他の処理は、次の目的file1にのみ使用されます。
  • G照会テーブルを追加し、照会テーブルの逆参照でキーs/,(.*)\n.*\n\1(,[0-9]*,T[0-9]*).*/\1\2/(間,および改行)を照会して、\1テーブルにフィールドを追加します。

おすすめ記事