Как обработать совпадения строк в awk?

Meld рекурсивно сравнивает папки с удобным интерфейсом.

2
06.10.2016, 19:19
3 ответа

Вы можете иметь сколько угодно пар awk правило-действие. Поскольку вам кажется, что вы хотите изменить порядок некоторых подполей, вам, вероятно, понадобится глобальное правило, которое разбивает все, что находится после : в массив, которым вы можете управлять позже для каждого правила.

Например (здесь я показал только первые два):

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
3
27.01.2020, 22:04

Я тоже не уверен, что понимаю, что вам нужно, но думаю, я бы сделал это за один раз с чем-то вроде этого ...

awk '/Time|Requests|Transfer/{print $0}' data.txt

Таким образом вы можете загружать шаблоны для соответствия и использовать "|". Итак, / Time | Requests | Transfer / означает «Match Time or Requests or Transfer» и распечатайте строку

2
27.01.2020, 22:04

Использование 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 потреблял бы все значение после двоеточия и пробелов.

0
27.01.2020, 22:04

Теги

Похожие вопросы