0

我有两个 CSV 文件:

id.1 id.2    
1 2     
a b

Name id   
John 1   
Amber a

基本上一个是有替换的列表,另一个只是一个列表。我需要用 id.2 替换 id.1 的所有实例。理想情况下,您会使用 OS X 终端来完成。我找到了几种方法来替换多个文件中的文本,但不使用多个字符串。谢谢大家。

4

2 回答 2

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
于 2013-06-05T15:57:49.130 回答
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,第二个文件在哪里。

于 2013-06-05T16:00:22.150 回答