如何在bash脚本中写入文件的特定行?

时间:2013-07-17 12:35:52

标签: bash

我想将从文件中获取的一些数据写入文件的最后一行(不是新行)。我使用以下脚本。

#!/bin/bash
echo "Write the start and end file number:"
read sta end 
echo "$sta" "$end"

for (( c="$sta"; c<="$end"; c++ ))
do
   cp AnalyzeClusterParameterFile AnalyzeClusterParameterFile$c
   awk '{if (NR== '$c' -10){print $1 " " $2 " " $3}}' center.dat >>  AnalyzeClusterParameterFile$c 

done

但它(AnalyzeClusterParameterFile $ c文件)会像这样进入新行

  

Rinner = 0.1!在Mpc

     

路由器= 5!在Mpc

     

NumberOfPoints = 50!默认值是16

     

VirialDensity = 200!默认值为200

     

CenterListName =

     

5.044627347e-01 5.008533222e-01 5.043365095e-01

我真正想要的是(AnalyzeClusterParameterFile $ c文件)

  

Rinner = 0.1!在Mpc

     

路由器= 5!在Mpc

     

NumberOfPoints = 50!默认值是16

     

VirialDensity = 200!默认值为200

     

CenterListName = 5.044627347e-01 5.008533222e-01 5.043365095e-01

2 个答案:

答案 0 :(得分:1)

您可以使用sed修改该行。

catcenter.dat

sed -i "/CenterListName/ s/=$/= $(cat center.dat)/" AnalyzeClusterParameterFile$c

首先读取值,然后使用sed将其添加到第二个文件中。

答案 1 :(得分:1)

这可能是由AnalyzeClusterParameterFile末尾的换行符造成的。您可以通过将cp命令替换为:

来删除它
head -c -1 AnalyzeClusterParameterFile > AnalyzeClusterParameterFile$c

请注意,这会杀死所有尾随角色,而不仅仅是换行符!