2012-07-18 77 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

相關問題