我有两个.dat文件,f1.dat和f2.dat如下所示。我试图将列从f2.dat文件复制到f1.dat文件,同时使用shell脚本命令保留f1.dat的格式。
文件1(f1.dat)
# Off---=0.210
# Angle=-2.3
# Br L1-- L2-- L3---
6 0.047 0.093 44.660
7 0.062 0.101 43.290
8 0.097 0.108 36.730
9 0.142 0.105 28.290
10 0.187 0.097 21.590
11 0.209 0.092 19.070
12 0.232 0.088 17.010
13 0.276 0.081 13.850
14 0.320 0.077 11.340
15 0.363 0.074 9.8600
16 0.385 0.073 9.2800
17 0.396 0.072 8.9800
18 0.407 0.071 8.6900
19 0.421 0.070 8.3000
20 0.428 0.070 8.1000
21 0.435 0.070 7.9100
文件2(f2.dat)
67.660
56.290
44.730
34.290
28.590
24.070
21.010
16.850
10.340
6.8600
5.2800
4.9800
4.6900
3.3000
2.1000
1.9100
我想用文件f2.dat中的列替换f1.dat中的第三列。 f1.dat的输出必须如下;
# Off---=0.210
# Angle=-2.3
# Br L1-- L2-- L3---
6 0.047 67.66 44.660
7 0.062 56.29 43.290
8 0.097 44.73 36.730
9 0.142 34.29 28.290
10 0.187 28.59 21.590
11 0.209 24.07 19.070
12 0.232 21.01 17.010
13 0.276 16.85 13.850
14 0.320 10.34 11.340
15 0.363 6.860 9.8600
16 0.385 5.280 9.2800
17 0.396 4.980 8.9800
18 0.407 4.690 8.6900
19 0.421 3.300 8.3000
20 0.428 2.100 8.1000
21 0.435 1.910 7.9100
感谢您的帮助。
答案 0 :(得分:0)
这个单线程解决了您的问题:
带标题
awk '{ if (NR > 3) { getline f2 < "f2.dat"; print $1 FS $2 FS f2 FS $4 } else print $0 }' f1.dat
或( 格式良好 )
awk '{ if (NR > 3) { getline f2 < "f2.dat"; printf "%-5d %8.3f %8.3f %8.4f\n",$1,$2,f2,$4 } else print $0 }' f1.dat
没有标题
awk 'NR > 3 { getline f2 < "f2.dat"; print $1 FS $2 FS f2 FS $4 }' f1.dat
您可以使用getline
将f2.dat
文件中的输入读入f2
变量。然后按照所需顺序打印f1.dat
和f2.dat
中的字段,这些字段由预定义字段分隔符FS
分隔,或使用printf
格式良好。 Awk开始在f2.dat
的第3行之后读取f1.dat
文件。