Junte-se a duas linhas com awk ou sed

2

Se eu tiver:

foo  
bar

.. e eu gostaria de awk / sed isso para:

foo-bar

.. qual é a sintaxe?

Estou tentando usar o System Profiler no OS X 10.6.x:

system_profiler SPMemoryDataType | awk '/Type/ {print $2} /Speed/ {print $2}'

para saída de velocidade do tipo (isto é, DDR-1067). Ainda não descobri como fazer isso usando print ou printf , pode tentar apenas grep .

    
por da4 15.09.2011 / 23:22

2 respostas

5

com tr :

tr '\n' '-'

Isso seria o suficiente? Isso substitui cada nova linha por uma vírgula.

com sed :

Uma solução mais bonita usando sed :

sed -e N -e 's/\n/-/'

O N acrescenta a nova linha ao espaço do padrão de acordo com a página do manual:

[2addr]N

Append the next line of input to the pattern space, using an embedded newline character to separate the appended material from the original contents. Note that the current line number changes.

com bash

Na verdade, o bash pode fazer o que o tr pode fazer. Apenas por completude:

while read l; do echo -n "$l-"; done

Veja uma pergunta semelhante no Stack Overflow: SED: Como posso substituir uma nova linha (\ n)?

    
por 15.09.2011 / 23:54
1
awk 'BEGIN {ORS="-"} {print}'

Junta seus dados. O que está dentro da instrução begin ocorre antes de ler os dados. Aqui nós definimos que o separador de registro de saída é -. Print imprime os dados.

    
por 16.09.2011 / 22:13

Tags