我研究了许多类似的问答,但仍然坚持解决方案。
我有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
怎么运行的
FNR==NR{a[$1]=OFS $2;next}
在读取
file2
(命令行上的第一个文件)时,我们a
在第一个字段 的键下向关联数组添加一个条目$1
。该条目由输出字段分隔符OFS
和后跟第二个字段组成$2
。然后我们跳过其余的命令,并跳转到重新开始就行了next
。打印
$0 a[$1]
在读取
file1
(命令行上的第二个文件)时,我们打印每一行,然后打印a
该行的数组值。