匹配两个文件中的公共行,并在regex中编辑第二个文件
我被困在最后一步,希望有人能帮助我 我有两个文件: 文件1= 青苹果 文件2= 青苹果/数量/100 红桃/数量/200 我的代码: grep-f file1 file2 | sed's/quantity.*/totalXYZ/' =绿苹果/totalXYZ 我想将其应用于file2,因此结果如下所示: 文件2= 青苹果/totalXYZ 红桃/数量/200匹配两个文件中的公共行,并在regex中编辑第二个文件,regex,Regex,我被困在最后一步,希望有人能帮助我 我有两个文件: 文件1= 青苹果 文件2= 青苹果/数量/100 红桃/数量/200 我的代码: grep-f file1 file2 | sed's/quantity.*/totalXYZ/' =绿苹果/totalXYZ 我想将其应用于file2,因此结果如下所示: 文件2= 青苹果/totalXYZ 红桃/数量/200 谢谢您可以通过以下方式使用AWK获得: awk -f grepandreplace.awk file2 file1 grepandrep
谢谢您可以通过以下方式使用AWK获得:
awk -f grepandreplace.awk file2 file1
grepandreplace.awk的代码为:
#!/usr/bin/awk -f
BEGIN {
FS = "/";
f_grep = ARGV[2];
ARGC = 2;
while ((getline < f_grep) > 0) {
grep[$1] = "";
}
}
{
if ($1 in grep) {
print $1"/totalXYZ";
} else {
print $0;
}
}
有问题吗?请给我留言。使用AWK可以通过以下方式获得:
awk -f grepandreplace.awk file2 file1
grepandreplace.awk的代码为:
#!/usr/bin/awk -f
BEGIN {
FS = "/";
f_grep = ARGV[2];
ARGC = 2;
while ((getline < f_grep) > 0) {
grep[$1] = "";
}
}
{
if ($1 in grep) {
print $1"/totalXYZ";
} else {
print $0;
}
}
有问题吗?请给我留言。您可以使用两个grep在一行中获得它:第一个用于匹配,第二个使用反向匹配-v。 然后将第二个输出附加到第一个输出:
echo -e `grep -f file1 file2 | sed 's/quantity.*/totalXYZ/'`"\n"`grep -vf file1 file2`
您可以使用2个greps在一行中获得它:第一个用于匹配,第二个使用反转匹配-v。 然后将第二个输出附加到第一个输出:
echo -e `grep -f file1 file2 | sed 's/quantity.*/totalXYZ/'`"\n"`grep -vf file1 file2`
非常感谢。太棒了!我还找到了另一种方法,一行一行,看看我的下一个答案。谢谢你谢谢你!!太棒了!我还找到了另一种方法,一行一行,看看我的下一个答案。再次感谢你,谢谢你。是的,这也奏效了!但如何使其写入文件2?我的想法是:sed-I…实际上,使用您的代码,我会将其重定向到file3,然后是mvfile3 file2。再次感谢rmunoz的帮助。您不需要文件3,您可以将输出重定向到文件2。不客气,-再次感谢你。是的,这也奏效了!但如何使其写入文件2?我的想法是:sed-I…实际上,使用您的代码,我会将其重定向到file3,然后是mvfile3 file2。再次感谢rmunoz的帮助。您不需要文件3,您可以将输出重定向到文件2。不客气,-