抽出したいデータ行を含むファイルがあります。私は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
答え2
また、あなたが必要とするものはよくわかりませんが、そのような状況で一度に完了すると思いました...
awk '/Time|Requests|Transfer/{print $0}' data.txt
これにより、一致するパターンをロードして「|」を使用できます。したがって、/Time|Requests|Transfer/
「時間一致、要求、または送信」を意味し、対応する行を印刷します。
答え3
使用TxR:
@(repeat)
@ (cases)
@param: @val [@units] (@rawdesc)
@ (or)
@param: @val [@units] @rawdesc
@ (or)
@param: @val [@units]
@ (bind rawdesc nil)
@ (or)
@param: @val @units (@rawdesc)
@ (or)
@param: @val @units @rawdesc
@ (or)
@param: @val @units
@ (bind rawdesc nil)
@ (or)
@param: @val
@ (bind units "")
@ (bind rawdesc nil)
@ (end)
@ (bind desc @(if rawdesc ` (@(regsub #/,/ "" rawdesc))` ""))
@ (output)
@param@desc, @val, @units
@ (end)
@(end)
ランニング:
$ txr tocsv.txr 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 (mean), 257.40, #/sec
Time per request (mean), 3.885, ms
Time per request (mean across all concurrent requests), 3.885, ms
Transfer rate (received), 210.65, Kbytes/sec
ケースの「はしご」は長く見えるかもしれませんが、コピーして貼り付けると簡単にできます。コードは最初の試みで目的の結果を生成し、理解しやすいです。探している内容を一目でわかります。
イベントの順序が重要です。状況が試合で始まる場合
@param: @val
最初に入れると、val
コロンとスペースの後ろの合計値が消費されます。