很抱歉没有明确的标题。我会试着解释一下我的问题。
我有两个文件A和B.
文件A 的格式如下:
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
现在,需要做的是,我必须在文件A (xyzzy
,abcde
,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流程的一部分。
答案 0 :(得分: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
这当然假设这两个文件中没有其他行会弄乱处理。
答案 1 :(得分: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
答案 2 :(得分:0)
您可以用您选择的语言编写一个简单的脚本,将字符串拆分为空格字符并使用数组(取决于文件的大小)。
但如果这是一次只需要完成的一次性案例,请打开Excel并将文件导入为由空格字符(或任何相关内容)分隔的CSV。然后,您可以根据需要对行进行排序,并复制“挖出”整列值。在包含空格的值之间添加一些额外的列,将它们填满,然后将文件保存为纯文本。
它可能不太漂亮,但它可以非常有效地组合简单的数据集。特别是对于一次性任务。