Adiciona números a um campo em um arquivo

1

Eu tenho um arquivo e alguns dados se parecem com isso:

Archie McNichol:(206) 548-1348:250:100:175

Eu quero pegar o 175 no final e adicionar 100 nele, então será impresso:

Archie McNichol:(206) 548-1348:250:100:275

Isso é tudo o que tenho:

#!/bin/bash
while IFS=: read -r -a LINE
do
    added=${LINE[3]} | 100
    echo "${LINE[0]}" $added+100

done < "$1"
    
por jake pyles 25.08.2017 / 05:49

1 resposta

2

Como jasonwryan comenta:

$ awk -F: '{$NF += 100}1' file

ou, corrigido por uma óbvia omissão ( OFS ) e escrita da maneira que eu escreveria,

$ awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }' file >file.new

ou

$ awk -v FS=':' -v OFS=':' '{ $NF += 100; print }' file >file.new

Isso lerá a partir de file e criará um novo arquivo chamado file.new .

Este script awk curto trata cada linha de file como consistindo em campos : -delimited. Com $NF , podemos acessar o último campo de cada linha e, com $NF += 100 , adicionamos 100 a qualquer valor.

O print produzirá a linha modificada ( 1 na solução de comentário é um valor de verdade que solicita awk a executar a ação padrão de imprimir a linha atual).

As opções de linha de comando -v FS=':' -v OFS=':' definem os separadores de campo de entrada e saída como : .

Teste com uma única linha de entrada:

$ echo 'Archie McNichol:(206) 548-1348:250:100:175' | awk -v FS=':' -v OFS=':' '{ $NF += 100 } { print }'
Archie McNichol:(206) 548-1348:250:100:275
    
por 25.08.2017 / 08:14