我有两个.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
我已经尝试了以下命令,但我得到的只是一团糟
awk 'FNR==NR{a[NR]=$0;next} {sub($4, a[FNR])}1' f1.dat f2.dat > final.dat
我想将f1.dat中的第四列替换为文件f2.dat中的列。 f1.dat的输出必须如下;
# Off---=0000
# Angle=0000
# Br L1-- L2-- L3---
6 0.047 0.093 67.660
7 0.062 0.101 56.290
8 0.097 0.108 44.730
9 0.142 0.105 34.290
10 0.187 0.097 28.590
11 0.209 0.092 24.070
12 0.232 0.088 21.010
13 0.276 0.081 16.850
14 0.320 0.077 10.340
15 0.363 0.074 6.8600
16 0.385 0.073 5.2800
17 0.396 0.072 4.9800
18 0.407 0.071 4.6900
19 0.421 0.070 3.3000
20 0.428 0.070 2.1000
21 0.435 0.070 1.9100
我会非常感谢任何帮助。
答案 0 :(得分:2)
awk
救援!
$ awk 'NR==FNR {a[NR]=$1;next}
FNR>3 {sub($NF"$",a[FNR-3])}1' file2 file1
# Off---=0.210
# Angle=-2.3
# Br L1-- L2-- L3---
6 0.047 0.093 67.660
7 0.062 0.101 56.290
8 0.097 0.108 44.730
9 0.142 0.105 34.290
10 0.187 0.097 28.590
11 0.209 0.092 24.070
12 0.232 0.088 21.010
13 0.276 0.081 16.850
14 0.320 0.077 10.340
15 0.363 0.074 6.8600
16 0.385 0.073 5.2800
17 0.396 0.072 4.9800
18 0.407 0.071 4.6900
19 0.421 0.070 3.3000
20 0.428 0.070 2.1000
21 0.435 0.070 1.9100
请注意,您发布的预期输出不会保留格式。
答案 1 :(得分:0)
使用以下单行,您可以将4th
文件的f1.dat
列替换为f2.dat
的内容:
awk '{ if (NR > 3) { getline f2 < "f2.dat"; printf "%-5d %8.3f %8.3f %8.4f\n",$1,$2,$3,f2 } else print $0 }' f1.dat
使用getline
,您可以将f2.dat
文件的输入读入f2
变量。然后按照所需顺序打印f1.dat和f2.dat中的字段,格式为printf
。
如果您想要替换不同的列,可以根据需要更改$1,$2,$3,f2
的顺序并最终添加$4
。 See here