Как извлечь только значения, превышающие пороговое значение

En ksh93, bashozsh:

files=( 2*.txt )
cat "${files[@]: -5}"

Esto crearía una matriz de nombres de archivo que coinciden con el patrón 2*.txt. Luego generaría el contenido de los últimos cinco de estos.

En zsh, también puede especificar un rango de archivos como parte de sus calificadores globales:

cat 2*.txt([-5,-1])

En cualquier shell POSIX, esto también se puede hacer a través de

set -- 2*.txt
while [ "$#" -gt 5 ]; do shift; done   # or: [ "$#" -gt 5 ] && shift "$(( $# - 5 ))"
cat "$@"

Esto establece los parámetros posicionales para los nombres de archivo que coinciden con el patrón. Luego cambia los nombres desde el principio de la lista hasta que la lista solo tenga cinco elementos. Luego se invoca caten los nombres de archivo restantes.

En todas estas soluciones, los archivos se ordenarían lexicográficamente. Los nombres de archivo con espacios o saltos de línea se manejan correctamente.

4
24.07.2019, 23:07
3 ответа

Предполагая, что ваш файл называется logFile, эта команда сделает это:

egrep ',logDurationMillis:(9[5-9][0-9]|[1-9][0-9]{3,}),' logFile
5
27.01.2020, 20:45

еще один awkодин:

awk -F':|,' '$4 > 950' file

отпечатки:

logAlias:Overall,logDurationMillis:961,logTimeStart:2019-07-24_15:30:06.599,logTimeStop:2019-07-24_15:30:06.660

Обновление(в связи с вопросом ОП:)

вы можете реконструировать поля следующим образом:

awk -F':|,' '$4 > 950 {print $3 ":" $4 "," $5 ":" $6 ":" $7 ":" $8 }' file

отпечатки:

logDurationMillis:961,logTimeStart:2019-07-24_15:30:06.599

(возможно, существует более простой способ объединения полей 3 -8, но вам также необходимо восстановить различные разделители полей)

1
27.01.2020, 20:45

С awk:

  1. если вы знаете, что "logDurationMillis" является вторым элементом:

    awk -F'[:,]' -v limit=950 '$4 >= limit' file
    
  2. иначе

    awk -F'[:,]' -v limit=950 '{
        for (i=1; i<NF; i+=2) 
            if ($i == "logDurationMillis" && $(i+1) >= limit) 
                print
    }' file
    
11
27.01.2020, 20:45

Теги

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