【发布时间】:2018-11-20 16:55:20
【问题描述】:
我有两个文件:
file 1
Name Height
Jay 180
Kathy 171
Amy 163
Bill 176
Hellen 157
file 2
Name Height
Jay 195
Amy 173
Hellen 161
如果名称(第 1 列)在文件 2 中匹配,我想替换文件 1 中第二列的值。如果名称不匹配,则保持不变。结果应该是:
Name Height
Jay 195
Kathy 171
Amy 173
Bill 176
Hellen 161
只有 Jay、Amy 和 Hellen 的身高发生了变化,因为他们的名字存在于文件 2 中。
我尝试使用 for 循环加上 awk 或 join 来解决这个问题,但效果不是很好。最后我使用excel从文件2生成了一个LONG awk命令并应用了离子文件1,它起作用了:
awk '{OFS="\t";
if($1~/^Jay$/){$2="195"; print $0;}
else if($1~/^Amy$/){$2="173"; print $0;}
else if($1~/^Hellen$/){$2="161"; print $0;}
}' file 1
这样,我尝试用for循环来生成:
else if($1~/^ Amy $/){$2=" 173 ";print $0;}
上面包含命令 part1 & name & command part2 & height to replace & command part3。但是很难将这些命令放入变量中,因为它包含特殊字符,例如:if、~、/、$
我想知道是否有任何更简单的方法可以仅通过命令来完成? 谢谢!
查理
【问题讨论】:
-
订单相关吗?如果不是,您可以只使用文件 2,并添加文件 1 中不在文件 2 中的记录。如果顺序很重要,请说明其意义,因为这些似乎不是按字母顺序排列的。
-
@Charlie,通过查看您的个人资料了解到您几乎没有选择任何答案作为正确答案,请尝试从所有答案中选择一个答案作为正确答案,并更新所有用户他们的解决方案发生了什么。你也可以看到这个链接一次stackoverflow.com/help/someone-answers