2012-07-18 83 views
1

对不起,没有明确的标题。我会试着解释我的问题。比较2个文件中的关键字,并将与关键字相关的值从一个文件替换为另一个文件

我有两个文件A和B.

文件的格式是这样的:

set_time 10 temp max 2 min 1 xyzzy 
set_time 10 temp max 2 min 1 abcde 
set_time 10 temp max 3 min 2 ersfg 
set_time 8 temp max 2 min 0 fdfdf 

文件B看起来是这样的:

xyzzy 7.5 
abcde 8.5 
ersfg 9.5 
fdfdf 9.0 

现在,需要做的是,我必须搜索文件中的最后一列名称Axyzzyabcde,fdfdf等),并将第二列值替换为文件B中的第二列值。

因此,输出应该是这样的:

set_time 7.5 temp max 2 min 1 xyzzy 
set_time 8.5 temp max 2 min 1 abcde 
set_time 9.5 temp max 3 min 2 ersfg 
set_time 9.0 temp max 2 min 0 fdfdf 

任何帮助表示赞赏。这是TCL流程的一部分。

回答

2

阅读与映射所述第二文件,这样的事情:

set f [open file_B] 
set mapping [dict create] 
while {[gets $f l]} { 
    if {[feof $f]} break 
    dict set mapping {*}$l 
} 

则过程通过使set_time输出本身的命令的原始文件,而改变所需的值:

proc set_time {num_to_replace temp max maxnum min minnum mapval} { 
    puts "set_time [dict get $::mapping $mapval] $temp $max $maxnum $min $minnum $mapval" 
} 

然后只是source原始数据文件:

source file_A 

这当然假定这两个文件中没有其他行,这会弄乱处理过程。

+0

谢谢。我会试试这个。 – user1497417 2012-07-19 00:50:07

+0

这是处理看起来像(无聊)Tcl脚本的文件的不错方式。它与[安全解释器](http://www.tcl.tk/man/tcl8.5/TclCmd/safe.htm)很好地混合在一起,但是你必须读取父文件中的文件和'$ slave eval'。 – 2012-07-19 06:21:49

0

您可以编写一个简单的脚本,以您选择的语言来完成此任务,将字符串分割为空格字符并使用数组(取决于文件的大小)。

但是,如果这是一次性事件,您只需要这次完成,请打开Excel并将文件导入为由空格字符(或任何相关内容)分隔的CSV文件。然后,您可以根据需要对行进行排序,并复制'n'整个值列。在包含空格的值之间添加一些额外的列,填充它们,然后将文件保存为纯文本。

它可能不是很漂亮,但它可以组合简单的数据集残酷有效。特别是对于一次性任务。

+0

感谢。但这不是一次性任务。这实际上是我写的一个更大的TCL流程的一部分,目前我在这里停留。 – user1497417 2012-07-19 00:11:16

1

也许你会发现一个awk脚本有用:

FNR == NR { 
    fileA[$1] = $2 
    next 
} 

{ 
    for (i in fileA) { 
     if (i == $NF) { 
      $2 = fileA[i] 
      print 
     } 
    } 
} 

运行,如:

awk -f script.awk fileB.txt fileA.txt 

结果:

set_time 7.5 temp max 2 min 1 xyzzy 
set_time 8.5 temp max 2 min 1 abcde 
set_time 9.5 temp max 3 min 2 ersfg 
set_time 9.0 temp max 2 min 0 fdfdf 
+0

简单明了。这是我怎么做到的,+1 – Birei 2012-07-19 08:55:29

+0

@Birei,谢谢 - 用我的'awk'脚本,我的目标是复制类似Birei的响应:-) – Steve 2012-07-19 09:36:54

+0

谢谢。阅读时看起来对我来说,我注意到相似之处,但一切都好。我只是这样做,以方便阅读的用户,很高兴看到它在其他帖子也:-) – Birei 2012-07-19 09:48:33

相关问题