tenho um arquivo assim
d1000 1000
d1001 100
d1002 10
d1003 1
Eu quero modificar a segunda coluna onde o comprimento não é igual a 4. Mas eu quero imprimir apenas as linhas que são modificadas, então o texto original na coluna 2 fica na coluna 2, e a mudança é impressa na 3ª coluna com um incremento para um número.
Saída Desejada:
d1001 100 1101
d1002 10 1102
d1003 1 1103
Estou tentando nesse sentido, mas não consigo obter a sintaxe ou os resultados
awk -v n=1100 '((length($2)!=4 && length($2)>0) {new=($2=++n)}; {print $1, $2, new}' file
Você pode
print
a linha existente ($0
) e um novo campo como este,,
usará o separador de saída entre os argumentos.Resultado:
Se você precisar de alguma formatação adicional da saída, poderá usar
printf
function. Segue um exemplo de alinhamento:resultado
Usando Raku (anteriormente conhecido como Perl_6)
Esta pergunta é semelhante a uma pergunta recente e você pode modificar um pouco a resposta do Raku dessa pergunta.
Resumidamente (comparado com a pergunta anterior), pergunte se
if .words[1]
a segunda coluna pode corresponder a uma string que não contém nada além de\d**0..3
zero a três dígitos e, em caso afirmativo, imprima tudo.words
, seguido por uma terceira coluna que retorna o$i
contador, começando de um valor basal de1100
incrementado via++
.Entrada de amostra:
Saída de amostra:
https://unix.stackexchange.com/a/703436/227738
https://raku.org