替换 File1 中的模式并将其替换为 File2 中相应的匹配模式 + 列

替换 File1 中的模式并将其替换为 File2 中相应的匹配模式 + 列

我研究了许多类似的问答,但仍然坚持解决方案。

我有2个文件。

文件1

cow
aaaaa
brown
bbbbb
often
ccccc
farts
ddddd

文件2

在 File2 中,以“空格”作为分隔符,然后 col 1="brown" 和 col2="149,456,foo"。另外,File1 和 File2 的顺序不同(排序在这里不起作用,我想依靠匹配的键来进行替换)。

brown 149,456,foo
cow 192,231,bar
farts 81,2007,tip
often 427,541,top

我想创建文件3

cow 192,231,bar
aaaaa
brown 149,456,foo
bbbbb
often 427,541,top
ccccc
farts 81,2007,tip
ddddd

换句话说,记下 File2 中的 column1(棕色)并在 File1 中搜索它。当在 File1 中找到该匹配项时,将匹配项替换为相应 File2 的整行 (brown 149,456,foo)。

我试过这个:

$ awk 'NR==FNR{a[NR]=$0;next}{$6=a[FNR]}1' file2 file1

但结果似乎采用了每个 row1,然后将其与其他文件中的 row1 一起打印,不涉及匹配/替换。

brown     brown 149,456,foo
aaaa     cow 192,231,bar
cow     farts 81,2007,tip
bbbbb     often 427,541,top
farts     
ccccc     
often     
ddddd 

我想使用 awk 或 sed。预先非常感谢您的任何建议!

答案1

尝试:

$ awk 'FNR==NR{a[$1]=OFS $2;next} {print $0 a[$1]}' file2 file1
cow 192,231,bar
aaaaa
brown 149,456,foo
bbbbb
often 427,541,top
ccccc
farts 81,2007,tip
ddddd

怎么运行的

  1. FNR==NR{a[$1]=OFS $2;next}

    在读取file2(命令行上的第一个文件)时,我们a在第一个字段 的键下向关联数组添加一个条目$1。该条目由输出字段分隔符OFS和后跟第二个字段组成$2。然后我们跳过其余的命令,并跳转到重新开始就行了next

  2. 打印$0 a[$1]

    在读取file1(命令行上的第二个文件)时,我们打印每一行,然后打印a该行的数组值。

相关内容