将两列的数值添加到文本文件中

将两列的数值添加到文本文件中

我有两个文本文件,其内容如下;

data_1:473428800.0 0 0.000004 1.00 WETZTROPMCIL   #4 columns, several lines
       473429100.0 0 0.000002 1.00 WETZTROPMCIL

data_2:473428800.0 0 2.100000 1.00 DRYTROPMCIL    #4 columns, several lines
       473429100.0 0 2.200000 1.00 DRYTROPMCIL

我需要将一个文件第 3 列的每一行添加到另一个文件第 3 列的相应行,然后将这些总和替换到新文件中 data_1 的第 3 列,如下所示;

merged_data= data_1:473428800.0 0 2.1000004 1.00 WETZTROPMCIL   #4 columns, several lines
                    473429100.0 0 2.2000002 1.00 WETZTROPMCIL

答案1

尝试:

paste data_1 data_2 | awk '{$3=sprintf("%.10g", $3+$8); NF=5; print}'

笔记:

  • 我看到每个文件有 5 个字段,而不是 OP 中所说的 4 个。

  • paste将合并两个文件中的行。

  • awk将看到每行有 10 个字段。NF=5告诉它只保留前 5 个,它们来自data_1

  • [s]printf浮点数以的格式打印%.10f。这可能正确也可能不正确。请参阅man 3 printf

  • 如果需要排序,可以通过进程替换来完成:

    paste <(sort [args] data_1) <(sort [args] data_2) | awk ...
    

答案2

Matei 的方法应该能保证行的顺序一致。因此,下面的方法会更安全。

sort -k 1n data_1 > data_1_sort
sort -k 1n data_2 > data_2_sort
paste data_1_sort data_2_sort| awk '{$3=sprintf("%.10g", $3+$8); NF=5; print}'

相关内容