複数の区切り文字を持つAwk抽出フィールド

複数の区切り文字を持つAwk抽出フィールド

ファイルの内容は次のとおりです。

AB: 20190131  13 J-1|19:30:00.000000000 18:06:00.000000000 123466  50 @TEST . "" 1234 - I . ".." "" "" "TEST TEXT 1" "TEXT 2: Sr of human happiness. To obtain some advantage from it? But who has any right to find f.==Required file.csv.gz FIELD*SERVER-TIME*05:29:51.981378000" "" NoTime
AB: 20190131  1 J-1|19:30:00.000000000 18:06:00.000000000 123466  50 @TEST . "" 1234 - I . ".." "" "" "TEST TEXT 1" "TEXT 2: Sr of human happiness. To obtain some advantage from it? But who has any right to find f.==Required file2.csv.gz,Required file5.csv.gz FIELD*SERVER-TIME*05:29:51.981378000" "" NoTime

最初のフィールドをフィールド区切り文字(==)として使用して、*csv.gzファイル名の後に続く3番目のフィールドを印刷したいと思います。

サンプル出力は次のとおりです。

13,Required file.csv.gz
1,Required file2.csv.gz,Required file5.csv.gz

次のコマンドを使用してファイル名を抽出できます。

awk -F "==" '/.csv.gz/{print $2}' | awk '{print $1}'

ただし、同じ行の3番目のフィールドを取得できません。

ベストアンサー1

あなたはmatch()それを使用することができますプログラム開始長さそしてsubstr()

awk 'match($0,/==.*?.csv.gz/){print $3","substr($0, RSTART+2, RLENGTH-2)}' file 

どこ

match()パターンに一致する部分文字列を見つけるために関数を使用します/==.*?.csv.gz/。一致する行について、我々は得るでしょうプログラム開始そして長さ一致するテキストの位置と長さを識別してから(および一致するテキストから先行する '=='削除)をsubstr($0, RSTART+2, RLENGTH-2)使用してテキストを検索します。+2-2

おすすめ記事