Adicione parênteses no primeiro elemento da primeira linha

0

Eu gostaria de adicionar parênteses em torno de "8" - o primeiro elemento na primeira linha. Um exemplo do meu arquivo segue.

8   089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20    102
8   089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9 

Eu usei o seguinte comando para alcançar o resultado.

awk '{print "("$0")"}' file.txt1

O resultado segue.

(8  089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20    102)
(8  089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9)

E eu quero uma saída como a seguinte.

(8) 089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20    102
(8) 089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9
    
por armando acosta 20.04.2018 / 21:00

2 respostas

2

Assumindo que os separadores de campo no arquivo original são guias (e / ou você deseja que a saída seja delimitada por tabulação), então você pode usar awk da seguinte forma:

awk -F '\t' -v OFS='\t' '{ $1 = sprintf("(%s)", $1) } 1' file

Isso modifica o primeiro campo e, em seguida, gera a linha reformada com o campo modificado. O 1 no final causa a saída e pode ser substituído por { print } .

Seu código está fazendo algo semelhante a isso, mas você usa $0 , que é o conteúdo da linha todo , não apenas o primeiro campo.

Você também pode usar sed , o que deixaria o resto da linha intocada:

sed -E 's/^([^[:blank:]]+)/()/' file

Corresponde a qualquer sequência de caracteres não vazia no início da linha e substitui-os pela mesma sequência de caracteres entre parênteses.

Outra variação com sed que primeiro insere um ( no início da linha e insere um ) antes do primeiro caractere em branco (um caractere "em branco" significa um espaço ou uma tabulação):

sed -E -e 's/^/(/' -e 's/([[:blank:]])/)/' file

A solução awk é mais flexível, pois permite modificar facilmente qualquer qualquer campo na linha, mas as soluções sed permitem manter os delimitadores que você tem no original arquivo, sejam eles múltiplos espaços ou tabulações. Eu só incluí as soluções sed aqui porque você queria modificar o primeiro campo na linha, e esse campo está prontamente disponível para (fácil de encontrar com) um programa sed .

    
por 20.04.2018 / 21:52
0

Sua postagem está usando guias para separar campos, eu uso isso.

A solução mais simples que preservará todos os espaços e tabulações na linha é garantir que o separador de campos seja um caractere (se não houver caracteres à esquerda na linha):

$ awk -F '[\t]' -v OFS='\t' '{$1="("$1")"}1' file.txt1
(8) 089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20   102
(8) 089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9

Nota: Se o campo estiver cercado por espaços (por exemplo), isso acontecerá:

awk -F '[\t]' -v OFS='\t' '{$1="("$1")"}1'
( 8 )   089.3   96.72   61  2   0   4240    4300    2420    2360    3e-20   102
(  8  ) 089.3   96.67   60  0   1   4239    4296    2419    2360    1e-18   96.9

Nota: Se houver delimitadores de tabulação repetidos, a numeração dos campos será alterada (um campo a mais para cada tabulação adicional).

    
por 21.04.2018 / 23:19

Tags