Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 比较不同数字格式的文件_Sorting_Awk_Numbers_Format - Fatal编程技术网

Sorting 比较不同数字格式的文件

Sorting 比较不同数字格式的文件,sorting,awk,numbers,format,Sorting,Awk,Numbers,Format,首先我要感谢你们的社区,你们在过去的几个月里给了我巨大的帮助,感谢你们详细的回答和你们的评论 然而,我遇到了一个障碍。我想比较两个包含模拟数据的文件。这些文件是先前操作的结果,该操作包括从2个输出文件中提取所需数据 所以输出文件1->sorteddata1 输出文件2->sorteddata2 2.000000E-5 A 3.600000E-5 B 5.600000E-5 C . . . 塔塔1看起来像那样 0.200000e-4 a b c d

首先我要感谢你们的社区,你们在过去的几个月里给了我巨大的帮助,感谢你们详细的回答和你们的评论

然而,我遇到了一个障碍。我想比较两个包含模拟数据的文件。这些文件是先前操作的结果,该操作包括从2个输出文件中提取所需数据

所以输出文件1->sorteddata1 输出文件2->sorteddata2

2.000000E-5 A 
3.600000E-5 B 
5.600000E-5 C 
      . 
      . 
      . 
塔塔1看起来像那样

0.200000e-4 a b c d e  
0.400000e-4 f g h i j  
0.560000e-4 k l m n o
            . 
            . 
            . 
塔塔2

2.000000E-5 A 
3.600000E-5 B 
5.600000E-5 C 
      . 
      . 
      . 
我想要的是,Ta3:

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
            .
            .
            .
因此,如果第一列中的数字相同,则将sorteddata2中的相应值添加到sorteddata1的第七列中

我想从这里开始:

但是每个文件的第一列的数字格式是不同的,所以我没有得到任何返回。我真的很想使用awk(个人喜好,我有点喜欢)

我们的目标是使用gnuplot绘制此图,因此希望最后一列中的空白不会成为问题

您对此有何想法?

您可以使用它使数字保持相同的格式:

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
,数字格式为
sub(“E”、“E”和$1)
。总而言之:

awk 'NR==FNR{value=sprintf("%e", $1); a[value]=$2; next} {sub("E","e",$1); value2=sprintf("%e", $1); print $0, a[value2] }' f2 f1

嗯,我遇到了一根“未端接的绳子”。看起来它不像大写字母E。我没有其他“%E”的此错误。您可以将
E
替换为
E
。试一试这个:
awk'NR==FNR{value=sprintf(“%e”,$1);a[value]=2;next}{sub(“e”,“e”,$1);value2=sprintf(“%e”,$1);print$0,a[value2]}'f2 f1
非常好,先生。!非常感谢,祝你今天愉快!!:-)