ファイルの内容は次のとおりです。
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