首先,我要感谢您的社区,在过去的几个月里,由于您的详细答案和意见,您一直在帮助我。
然而,我遇到了一个障碍。我想比较包含模拟数据的2个文件。这些文件是先前操作的结果,其中包括从2个输出文件中提取所需数据。
所以output-file1-> sorteddata1 输出file2-> sorteddata2
Sorteddata1看起来像那样
0.200000e-4 a b c d e
0.400000e-4 f g h i j
0.560000e-4 k l m n o
.
.
.
Sorteddata2
2.000000E-5 A
3.600000E-5 B
5.600000E-5 C
.
.
.
我希望如此,sorteddata3:
0.200000e-4 a b c d e A
0.400000e-4 f g h i j
0.560000e-4 k l m n o C
.
.
.
因此,如果第一列中的数字相同,则在sorteddata1的第7列中的sorteddata2中添加相应的值。
我想从这里开始:
但每个文件第一列的数字格式不同,所以我没有得到任何回报。我真的很想用awk(个人喜好,我喜欢它)
目标是使用gnuplot绘制这个,所以希望最后一栏中的空白不会成为问题。
对此有何想法?
答案 0 :(得分:0)
您可以使用sprintf
使数字保持相同的格式:
sprintf (格式,表达式1,...)
返回(不打印)printf将打印的字符串 使用相同的参数(参见Printf)。
然后,逻辑与链接的答案中的逻辑相同,添加if/ default
个案例以打印当前行或它与另一个文件中匹配的行一起。
awk 'NR==FNR {value=sprintf("%e", $1)
a[value]=$2
next
}
{value2=sprintf("%e", $1)
print $0, a[value2]
}' f2 f1
对于您的给定输入,它返回:
$ awk 'NR==FNR{value=sprintf("%e", $1); a[value]=$2; next} {value2=sprintf("%e", $1); if (value2 in a) {print $0, a[value2] }' f2 f1
0.200000e-4 a b c d e A
0.400000e-4 f g h i j
0.560000e-4 k l m n o C
在评论中注意,您说E
格式显示"未终止字符串"你错了。因此,您可以使用E
替换数字格式为e
的{{1}}。一起来:
sub("E","e",$1)