抽出したいデータ行を含むファイルがあります。私はawk
これが完璧だと思います。疑似コードでは、次のようなことを想像しています。
- 処理したい行に一致する項目を探す
awk
- 2番目の部分では、内部的に
{}
私のデータと一致する正規表現を探しますgrep -o
。 {}
おそらく、端または内側に一致するものを印刷します。END
これをどうすればいいかわからず、cut
正しく使用していないこともわかりますが、ただ意図をちょっと与えるためにお見せするだけです。助けてください。本質的に、私はさまざまな正規表現の一致を特定し$0
て抽出し、それを独自のCSV形式に統合できるようにしたいと思います。
私が試したことは次のとおりです。
➜ tmp cat data.txt
Concurrency Level: 1
Time taken for tests: 0.004 seconds
Complete requests: 1
Failed requests: 0
Total transferred: 838 bytes
HTML transferred: 632 bytes
Requests per second: 257.40 [#/sec] (mean)
Time per request: 3.885 [ms] (mean)
Time per request: 3.885 [ms] (mean, across all concurrent requests)
Transfer rate: 210.65 [Kbytes/sec] received
➜ tmp cat data.txt | awk '/Complete requests:/ {print;}'
Complete requests: 1
➜ tmp cat data.txt | awk '/Complete requests:/ {print $0;}'
Complete requests: 1
➜ tmp cat data.txt | awk '/Complete requests:/ {print;}'|cut -d: -f2
1
似たようなものを見つけなければなりません。
Time taken for tests, 0.0004, s
Requests per second (mean), 257.40, #/sec
.
.
.
Transfer rate received, 210.65, Kbytes/sec
データは非常に均一ではないため、各一致$0
に対して別々の「正規表現一致後」プロセスを作成する必要があります/Concurrency Level:/
。Time taken for tests:
ベストアンサー1
awk
ルール - アクションペアは任意の数だけ持つことができます。特定のサブフィールドの順序を変更したいと思うので、:
後でルールごとに実行できる配列に従うすべての項目を分割するグローバルルールが必要になる場合があります。
たとえば、(ここでは最初の2つだけを表示しました):
awk '
BEGIN {FS=":[ \t]+"; OFS=", "}
{split($2, a, /[ \t]+/)}
#
# now the case-by-case rule-action pairs
/Time taken/ {print $1, a[1], a[2]}
/Requests per second/ {print $1" "a[3], a[1], substr(a[2], 2, length(a[2])-2)}
' data.txt
Time taken for tests, 0.004, seconds
Requests per second (mean), 257.40, #/sec