Quero obter o valor inteiro após uma string específica de um arquivo e classificar todos os números inteiros. Ex - tenho um arquivo com milhares de linhas com peso de string,
-weight 100
-weight 200
-weight 20
Quero obter todos os valores inteiros em ordem de classificação.
Responder1
Se você estiver procurando pela sequência de números mais longa que é a última coisa na linha, basta usar grep
:
$ grep -oP '\d+\s*$' file
100
200
20
Diz para imprimir apenas a parte correspondente da linha e habilita expressões regulares compatíveis com Perl -o
. PCREs nos permitem usar "um ou mais dígitos" e "0 ou mais caracteres de espaço em branco". Então, todos juntos, esse comando imprimirá o maior trecho de números encontrado no final da linha.grep
-P
\d+
\s*
Se você precisar classificá-los, basta passar por sort
:
$ grep -oP '\d+\s*$' file | sort -n
20
100
200
Se, em vez disso, você precisar ancorar seu padrão usando uma string específica, use:
$ grep -oP -- '-weight\s+\K\d+' file | sort -n
20
100
200
O comando \K
diz grep
para não incluir nada que corresponda até este ponto, então o comando acima imprimirá apenas o trecho mais longo de números após -weight
e 0 ou mais espaços.
Observe que se quiser incluir também números negativos ou decimais, você precisará de:
grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
Por exemplo:
$ cat file
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4
$ grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
-32
-29
20
100
200
Responder2
Experimente isto:
cut -d ' ' -f2 inputfile|sort -n
-d ' '
- definir o delimitador para espaço
-f2
- obter a segunda coluna
sort -n
- classificar o resultado como números
Resultado do teste:
20
100
200
Responder3
Experimente este comando sed:
sed -E 's/^.*weight\s([[:digit:]]*).*/\1/' sort.txt | sort -n
Ou
sed -E 's/.*weight\s([0-9]*).*/\1/' sort.txt | sort -n
Caso de teste:
-weight 100
-weight 200
-weight 20
Resultados:
20
100
200
Nota: - Você não deu um bom caso de teste, então assumi o meu.
Informações:
^.*weight\s([[:digit:]])
: Leia cada linha e capture os números após a palavra “peso” com o “espaço” a seguir.| sort -n
: canalize a saída para o comando de classificação e classifique por valor numérico.