Encontre e substitua valores por contadores [fechados]

1

Eu tenho um arquivo com valores como:

location 100 SlotNumber
..some lines inbetween
location 150 SlotNumber
..some lines inbetween
location 160 SlotNumber
..some lines inbetween

Eu quero substituir o SlotNumber como SlotNumber:

location 100 SlotNumber1
location 150 SlotNumber2
location 160 SlotNumber3
...

Por favor, note que o 100 e o 1 não tem qualquer relevância. Eu estava olhando para usar algum tipo de contador dentro sed e substituir SlotNumber com "SlotNumber + Counter" e incrementá-lo após cada jogo.

Não sei quantas ocorrências existem nesse arquivo.

    
por Osho 02.04.2015 / 02:18

2 respostas

4

Começando com um arquivo básico aqui ...

$ cat file
location 100 Number
location 101 Number
location 102 Number

Podemos combinar em todas as linhas:

$ awk '{print $0 NR}' file 
location 100 Number1
location 101 Number2
location 102 Number3

fica mais complicado se houver preenchimento em algum lugar no meio. Você tem que ter um contador separado calculando o número de vezes que você vê um local.

$ cat file
location 100 SlotNumber
..some lines inbetween
location 150 SlotNumber
..some lines inbetween
location 160 SlotNumber
..some lines inbetween

Podemos imprimir apenas as linhas de localização:

$ awk 'BEGIN {x=1} /^location/ {print $0 x++}' file
location 100 SlotNumber1
location 150 SlotNumber2
location 160 SlotNumber3

Ou todos eles, apenas adicionando números para números de espaço.

$ awk 'BEGIN {x=1} {if ($3=="SlotNumber") {print $0 x++} else {print $0} }' file
location 100 SlotNumber1
..some lines inbetween
location 150 SlotNumber2
..some lines inbetween
location 160 SlotNumber3
..some lines inbetween

Aqui está um bom site para algumas explicações básicas do if-then-else para o awk.

link

    
por 02.04.2015 / 02:34
-1

Se você quiser uma alternativa para numerar linhas, caso seu arquivo tenha números mistos como este

location 100 Number
location 101 Number
location 102 Number
location 104 Number
location 103 Number
..
..
location 199 Number
location 200 Number

Você pode tentar algo assim. A suposição é que o número começa a partir de 100.

while read line
do
num='echo $line | cut -f2 -d ' ''
val='expr $num - 100'
echo "$line$val"
done < ln.txt

Isso imprime

location 100 Number0
location 101 Number1
location 102 Number2
location 104 Number4
location 103 Number3
..
location 199 Number99
location 200 Number100

EDIT: Graças ao @Scott, simplificou a declaração echo e removeu uma linha desnecessária.

    
por 02.04.2015 / 05:15

Tags