我有两个文件。
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。我会很感激。
最好的问候。答案 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