shell-在文件的每一行中插入多个文本

shell-在文件的每一行中插入多个文本

我有一个包含诸如 和 等点的坐标的文本xyz想将每一行更改为如下形式:

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。

相关内容