Como incrementar coluna usando o AWK

3

Eu tenho o seguinte padrão de arquivo:

insert_buffer cell_a 
insert_buffer cell_b
insert_buffer cell_b
...

Eu quero adicionar mais uma coluna ao final de cada linha com o número incrementado. ex. 0,1,2,3 ...:

insert_buffer cell_a name_0
insert_buffer cell_b name_1
insert_buffer cell_b name_2
...

Como faço para loop usando o awk? Ou qualquer outra solução está bem.

    
por Bryan 14.06.2017 / 01:37

2 respostas

4

$ awk '{$(NF+1) = "name_"(NR-1)} 1' file
insert_buffer cell_a name_0
insert_buffer cell_b name_1
insert_buffer cell_b name_2

Se você quiser usar sua própria variável no lugar da contagem de registros integrada NR , por exemplo

$ awk '{$(NF+1) = "name_"i++} 1' file
insert_buffer cell_a name_0
insert_buffer cell_b name_1
insert_buffer cell_b name_2

Se você deseja inserir o novo campo em outro lugar, uma maneira de fazer isso é prefixar ou anexá-lo a um campo existente, juntamente com um separador de campo de saída adicional OFS , por exemplo. inserir antes do segundo campo

$ awk '{$2 = "name_"i++ OFS $2 } 1' file
insert_buffer name_0 cell_a
insert_buffer name_1 cell_b
insert_buffer name_2 cell_b
    
por 14.06.2017 / 01:40
0

Isso pode ser feito usando o editor sed como indicado:

Observe que, como sed não possui noção de aritmética, isso pode ser feito por outros meios.

the variable $n stores the column number where you want the new data placed.

n=2;
sed -ne 1i\ -e 0 -e p\;= yourfile |\
sed -nE "N;s/\S\+/&\n/$n;s/\(.*\)\n\(.*\)\n/ name_ /p"

Resultados

insert_buffer name_0  cell_a
insert_buffer name_1  cell_b
insert_buffer name_2  cell_c
    
por 14.06.2017 / 11:48

Tags