我有一个包含诸如 和 等点的坐标的文本x
,y
我z
想将每一行更改为如下形式:
Point{ (1000+linenumber) } = {x , y, z};
我想要的是:例如对于212
以下行:
-0.534 2.345 0
我想:
Point{1212} = {-0.534, 2.345, 0};
我尝试过这种方法(我觉得很蠢),但仍然不是完全的:
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
这是我得到的:例如对于行,212
这里的结果是:
Ponit{ 212 -0.534, 2.345, 0}
答案1
非常简单awk
:
awk '{printf "Point{%d} = {%s, %s, %s};\n", NR+1000,$1,$2,$3}' file
printf
根据需要格式化输出。NR+1000
是文件内的行号+1000。$1,$2,$3
是字段 1 至 3。
答案2
您确实说得对,没有必要创建这么多文件,sed 可以链式运行,没有必要保存每一步。
以下是单行解决方案:
linenumber=0 && while read line; do linenumber=$((linenumber+1)) && echo $line | sed "s#^#Point{$linenumber} = {#g" | sed 's#$#};#g' >> out.txt; done<in.txt
用您当前的文本文件替换 in.txt,结果将是 out.txt。