Awk 如何使用sed和find替换基于列表的文本

Awk 如何使用sed和find替换基于列表的文本,awk,Awk,我有两个文件要处理 我需要用文件2中的文本替换文件1中的文本 文件一 client:datavalue client:datavalue client:datavalue 档案二 datavalue:newdatavalue datavalue:newdatavalue datavalue:newdatavalue 我想创建一个脚本,如果文件1和2中的数据值相同,它将用文件2中的新值替换它们 datavalue和newdatavalue从不相同 Francesco Lucianò给出的解决方

我有两个文件要处理 我需要用文件2中的文本替换文件1中的文本

文件一

client:datavalue
client:datavalue
client:datavalue
档案二

datavalue:newdatavalue
datavalue:newdatavalue
datavalue:newdatavalue
我想创建一个脚本,如果文件1和2中的数据值相同,它将用文件2中的新值替换它们

datavalue和newdatavalue从不相同

Francesco Lucianò给出的解决方案

把这个还给我

join: file1:2: is not sorted: client:datavalue
join: file2:477715: is not sorted: datavalue:newdatavalue
我尝试使用LOCALE=C获得相同的结果

更新我通过添加--nocheck订单修复了退货

但我还是在这个过程中停了下来

有时候我在文件2中没有新的数据值来表示文件1中的值,也许我认为这就是原因


感谢您的帮助

如果您按照我编写的顺序运行这些命令,您将得到想要的结果。如果您知道如何操作,还可以将它们保存在脚本中并运行它。以下是命令:

sort -k2 -t: file1 > file1.sorted;
sort -k1 -t: file2 > file2.sorted;
join -1 2 -2 1 -t: -a1 file1.sorted file2.sorted -o '1.1 2.2 1.2' | sed -E 's/::/:/g;s/([^:]+):([^:]+):?[^:]*/\1:\2/g' > file1;
rm file1.sorted file2.sorted;

欢迎加入SO,on,SO,我们鼓励用户添加他们为解决自己的问题所付出的努力,因此请在您的问题中添加同样的努力,然后让我们知道。欢迎加入SO!我不认为
find
是您需要的命令。。。也许是加入。检查
man find
页面,确保
find
是您要查找的内容。您的问题是修复示例输入,以显示每个字段的代表性值,而不是每个字段的每次出现都显示相同的字符串,并根据更新的示例输入显示预期输出。还包括你自己解决问题的尝试。请参阅。这绝对不是
sed
find
的工作。顺便说一句,
join
awk
可能是合适的。您可以使用脚本吗?