Muito simples com awk
:
awk '{printf "Point{%d} = {%s, %s, %s};\n", NR+1000,$1,$2,$3}' file
-
printf
formata a saída como desejado. -
NR+1000
é o número da linha dentro do arquivo +1000. -
$1,$2,$3
são os campos 1 a 3.
Eu tenho um texto contendo coordenadas de pontos, como x
, y
e z
, gostaria de alterar cada linha como:
Point{ (1000+linenumber) } = {x , y, z};
O que eu quero é: por exemplo, para a linha 212
, que é:
-0.534 2.345 0
Eu quero:
Point{1212} = {-0.534, 2.345, 0};
Eu tentei desse jeito (parece estúpido para mim) e ainda NÃO é completo:
while read p; do
echo "$p" | sed 's/\s/,/g;s/,$//' >> ./allPoint2
done <allPoint
rm -rf ./allPoint;
mv ./allPoint2 ./allPoint
cat -n allPoint > allPoint2
sed 's/^/Ponit{ /' ./allPoint2 >> allPoint3
rm -rf ./allPoint ./allPoint2;
mv ./allPoint3 ./allPoint
sed 's/$/}/' ./allPoint >> allPoint2
rm -rf ./allPoint;
mv ./allPoint2 ./allPoint
Isso é o que recebi: por exemplo, para a linha 212
, o resultado aqui é:
Ponit{ 212 -0.534, 2.345, 0}
Você está certo de que criar tantos arquivos é desnecessário, sed pode ser executado em uma cadeia, não há necessidade de salvar cada etapa.
O seguinte é uma solução de linha única:
linenumber=0 && while read line; do linenumber=$((linenumber+1)) && echo $line | sed "s#^#Point{$linenumber} = {#g" | sed 's#$#};#g' >> out.txt; done<in.txt
Substitua in.txt pelo seu arquivo de texto atual, out.txt será o resultado.