awk - Imprime todos os valores com um sufixo

0

Eu quero usar o awk para imprimir todos os valores em uma string delimitada com um sufixo estático anexado a cada um.

Entrada:

stack,over,flow
Delimitador:

Comma

Saída:

stack suffix, over suffix, flow suffix
    
por SQLadmin 26.11.2018 / 22:24

3 respostas

2
awk -F ',' -v OFS=',' -vpre="prefix" -vsuf="suffix" \
    '{ for (i=1;i<=NF;++i) $i = pre $i suf; print }'

Para a entrada

unix,and,linux

isso produziria

prefixunixsuffix,prefixandsuffix,prefixlinuxsuffix

O programa awk modifica cada campo em um loop, adicionando um prefixo e um sufixo. As cadeias de caracteres de prefixo e sufixo são passadas para os programas awk por meio de atribuições às variáveis pre e suf na linha de comando.

Para adicionar um espaço como prefixo e a string suffix (com um espaço inicial) como sufixo, você usaria

awk -F ',' -v OFS=',' -vpre=" " -vsuf=" suffix" \
    '{ for (i=1;i<=NF;++i) $i = pre $i suf; print }'

que produz

 unix suffix, and suffix, linux suffix
    
por 26.11.2018 / 22:37
2

Outra variante do Awk - fazendo uso dos separadores de saída internos para evitar um loop explícito:

awk -F, -v s=' suffix' 'BEGIN{OFS= s FS " "; ORS= s RS} {$1=$1} 1'

ex.

echo 'stack,over,flow' | awk -F, -v s=' suffix' 'BEGIN{OFS= s FS " "; ORS= s RS} {$1=$1} 1'
stack suffix, over suffix, flow suffix

Para saída separada por espaço, você pode anexar o separador de campo de saída padrão ao sufixo

$ echo 'stack,over,flow' | awk -F, -v s=' suffix' 'BEGIN{OFS= s OFS; ORS= s RS} {$1=$1} 1'
stack suffix over suffix flow suffix
    
por 26.11.2018 / 23:14
1
awk -F , '{print $1" suffix",  $2" suffix",  $3" suffix"}' OFS=", " suffix

awk -F , Define o separador de campo como

print $1" suffix", e assim por diante imprime um espaço e, em seguida, sufixo após o valor

OFS=", " Define o separador do campo de saída como uma vírgula com um espaço.

Saída:

 stack suffix, over suffix, flow suffix
    
por 26.11.2018 / 22:35