Substitua números na primeira seção do arquivo pelo resultado do cálculo

0

Eu tenho um arquivo assim:

     1 abcde
     2 00
     3 12
     4 12
     5 ghijkl
     6 jsaslm
     7 uawrns
     8 abcde
     9 \(%"!&/
    10 $!"$&/(
    90 !§%/(//

Eu quero substituir todos os números maiores que 3 na primeira "coluna" (ou seja, aquele que contém 1, 2 etc.). Eles devem ser substituídos pelo resultado do cálculo do número módulo 3 - exceto os números que são divisíveis por 3 (esses devem ser apenas 3). Então, o resultado deve ser assim:

     1 abcde
     2 00
     3 12
     1 12
     2 ghijkl
     3 jsaslm
     1 uawrns
     2 abcde
     3 \(%"!&/
     1 $!"$&/(
     3 !§%/(//

A formatação não importa muito, mas o caminho mostrado acima seria o preferido.

Estou usando o Linux.

    
por user146854 17.12.2015 / 09:44

2 respostas

2

Com o awk para sua pergunta atualizada

awk '$1{$1=$1%3?$1%3:3}1' file

 1 abcde
 2 00
 3 12
 1 12
 2 ghijkl
 3 jsaslm
 1 uawrns
 2 abcde
 3 \(%"!&/
 1 $!"$&/(
 3 !§%/(//
    
por 17.12.2015 / 10:18
2

com awk :

$ awk -v n=3 '{$1 = ($1 > n) ? ($1 % n) ? $1 % n : n : $1};1' <file
1 abcde
2 00
3 12
1 12
2 ghijkl
3 jsaslm
1 uawrns
2 abcde
3 \(%"!&/
1 $!"$&/(
3 !§%/(//
    
por 17.12.2015 / 09:48