从另一个CSV中查找并替换一个CSV

时间:2013-06-05 14:02:43

标签: search sed

我有两个CSV文件:

id.1 id.2    
1 2     
a b

Name id   
John 1   
Amber a

基本上一个是带有替换的列表,其他只是一个列表。我需要用id.2替换id.1的所有实例。理想情况下,您可以使用OS X终端进行操作。我找到了几种方法来替换多个文件中的文本,但没有使用多个字符串。 谢谢大家。

2 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了您的问题,但您可以扫描替换文件,注意哪些内容需要替换为什么值。然后迭代列表文件并将替换值与更新的值交换。像这样:

awk 'NR==FNR{a[$1]=$2;next} $2 in a{print $1,a[$2]}' replacement.txt list.txt 

测试:

$ cat list.txt 
Name id
John 1
Amber a

$ cat replacement.txt 
id.1 id.2
1 2
a b

$ awk 'NR==FNR{a[$1]=$2;next} $2 in a{print $1,a[$2]}' replacement.txt list.txt 
John 2
Amber b

答案 1 :(得分:0)

如果我正确理解了您的需求,您可以尝试sortjoin。使用bash样式的流程替换,您可以执行

$ join -11 -22 -o 2.1,1.2 <(sort -k1 <(tail -n+2 id12)) <(sort -k2 <(tail -n+2 list))
John 2
Amber b

其中id12是第一个文件,list是第二个文件。