Como separar valores numéricos de identificadores

3

Atualmente, estou escrevendo um script de shell que separa valores de seus identificadores (recuperados do grep).

Por exemplo, se eu grep um determinado arquivo, recuperarei as seguintes informações:

value1 = 1
value2 = 74
value3 = 27

Eu estou querendo saber qual comando UNIX eu posso usar para pegar as informações e convertê-las para este formato:

1 74 27
    
por sj755 16.02.2013 / 01:55

3 respostas

3

Você pode usar assim:

grep "pattern" file.txt | awk '{printf "%s ", $3}'

Dependendo do que você faz com grep , mas considere usar awk para greping :

awk '/pattern/{printf "%s ", $3}' file.txt

Outra forma de aproveitar as palavra-spliting :

echo $(awk '/pattern/{print $3}' file.txt)

Editar : eu tenho uma maneira mais divertida de entrar valores:

awk '/pattern/{print $3}' file.txt | paste -sd " " -
    
por 16.02.2013 / 01:57
3

Distribua tudo até o primeiro = e o espaço em branco subseqüente, converta novas linhas em espaços e imprima uma nova linha final:

… | sed 's/^[^=]*= *//' | tr '\n' ' '; echo
    
por 16.02.2013 / 02:07
1

Que tal simplesmente

cut -d= -f2 /tmp/file | xargs printf "%s "

Isso funciona porque:

  1. O shell "printf" embutido irá "repetir-se" se ficar mais argumentos que os parâmetros especificados na cadeia de saída
  2. xargs irá transformar as linhas da entrada em palavras no comando linha passada para printf
  3. cut usará o = como um separador e entregará apenas o que segue
  4. É claro que a string printf exibirá a saída e uma vez que não nova linha explícita é adicionada, acrescente cada uma ao final da última um.
por 16.02.2013 / 18:52