awkを使用した文字列の検索

awkを使用した文字列の検索

トランザクションIDのリストを含むfile-1があります。

ファイル1

201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969                
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969                   
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969     

ログを含むファイル2があります。他の場所にパイプがある可能性があります。したがって、パイプを区切り文字として使用することはできません。

ファイル2

logline-1|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969**
logline-2|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969**
logline-3|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969**
logline-4|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969**
logline-5|somefield fdfdsff dfwwtwtwt **201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969**

awk ... grep file-2を使用してfile-1のすべての内容を読み取ってfile-3を生成する方法(トランザクションID - file-2の発生回数)

予想ファイル3

201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969     2
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969     1
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969     2

ベストアンサー1

awkを試してみてください。

awk 'FNR == NR { v[$1] = 0; next; } { v[$4]++; } END { for (elem in v) { print elem, v[elem]; } }' File-1 File-2 >outfile

結果は次のとおりです。

201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|11.233.18.29.677220869928387637969 1
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|12.233.18.29.677220869928387637969 2
201503301616|9b8791b3-f860-409f-aad0-24debf834c1b|10.233.18.29.677220869928387637969 2

しかし、なぜ2つのファイルが必要なのかはまだわかりません。 File-2を使用してこれを行うことができます。

awk '{ v[$4]++; } END { for (elem in v) { print elem, v[elem]; } }' File-2 >outfile

結果は同じです。

おすすめ記事