使用linux中的sed用另一个文件的列替换文件的特定列

时间:2012-03-27 13:00:04

标签: linux replace sed

我有两个文件。

file1的下载数据只包含一列。

112.319
108.915
105.512

file2的数据如下,包含八列。

0.000000     0.000     0.000     0.000     0.000         0     0.0001.0000E+20  
0.000000     0.000     0.000     0.000 20.000000         0     0.0001.0000E+20  
0.000000     0.000     0.000     0.000 20.000000         0     0.0001.0000E+20 

我想用file1的第一列替换file2的第一列,输出将是

112.319     0.000     0.000     0.000     0.000         0     0.0001.0000E+20  
108.915     0.000     0.000     0.000 20.000000         0     0.0001.0000E+20  
105.512     0.000     0.000     0.000 20.000000         0     0.0001.0000E+20

我尝试用其他行的第一条记录替换每行的第一条记录,但未成功。如果有人可以帮我做sed。我会很感激。

最好的问候。

3 个答案:

答案 0 :(得分:2)

您可以使用paste / tr / cut / column命令:

$ paste file{1,2} | tr -s ' ' | cut -d ' ' -f 1,3- | column -t
112.319  0.000000  0.000  0.000  0.000      0  0.0001.0000E+20
108.915  0.000000  0.000  0.000  20.000000  0  0.0001.0000E+20
105.512  0.000000  0.000  0.000  20.000000  0  0.0001.0000E+20

答案 1 :(得分:1)

join -o 1.2,2.3,2.4,2.5,2.6,2.7,2.8 <(cat -n file1) <(cat -n file2) | column -t

产生

112.319  0.000  0.000  0.000  0.000      0  0.0001.0000E+20
108.915  0.000  0.000  0.000  20.000000  0  0.0001.0000E+20
105.512  0.000  0.000  0.000  20.000000  0  0.0001.0000E+20

更新:由于空格很重要,您可以使用字符串替换。这是awk:

awk 'NR==FNR {n[FNR]=$1; next} {sub(/[^[:space:]]+/, n[FNR]); print}' f1 f2
制造

112.319     0.000     0.000     0.000     0.000         0     0.0001.0000E+20
108.915     0.000     0.000     0.000 20.000000         0     0.0001.0000E+20
105.512     0.000     0.000     0.000 20.000000         0     0.0001.0000E+20

答案 2 :(得分:1)

这可能对您有用:

 cut -d' ' -f2- file2 | paste -d' ' file1 -

或者这个(GNU sed):

sed 'R file2' file1 | sed 'N;s/\n\S*//'

或者这个:

 awk 'FNR==NR{a[NR]=$1;next};{sub($1,a[FNR])}1' file1 file2

编辑:

这可能适合你:( GNU sed?)

sed '=;s/.*/s|\\S*|&|/' file1 | sed 'N;s/\n//' | sed -i -f - file2