Linux 如何根据文件B中的行号替换文件A中的某些行

Linux 如何根据文件B中的行号替换文件A中的某些行,linux,file,awk,sed,text-processing,Linux,File,Awk,Sed,Text Processing,我有两个文件A和B 文件中的行由两个用制表符分隔的字段或单个字段组成。在文件B中,每行由3个字段组成(同样用制表符分隔),第一个字段是整数,第二个和第三个字段是字符串。现在,我想更改文件a中的一行,如果它的行号出现在文件B中(在第一个字段)。通过更改,我的意思是我希望通过tab合并文件B中该行的第二个和第三个字段,并将相应的行放入文件A中 例如,假设我有一个包含3行的文件a File A: poo foo koo goo too roo 我有一个有两行的文件 File B

我有两个文件A和B

文件中的行由两个用制表符分隔的字段或单个字段组成。在文件B中,每行由3个字段组成(同样用制表符分隔),第一个字段是整数,第二个和第三个字段是字符串。现在,我想更改文件a中的一行,如果它的行号出现在文件B中(在第一个字段)。通过更改,我的意思是我希望通过tab合并文件B中该行的第二个和第三个字段,并将相应的行放入文件A中

例如,假设我有一个包含3行的文件a

File A:
poo    foo
koo    goo
too    roo  
我有一个有两行的文件

File B:
2 change-second-line with-this
3 change-third-line  with-that
最后,我想要一个包含以下内容的文件:

File final:
poo    foo
change-second-line    with-this
change-third-line    with-that  
有办法吗?一般来说,在问问题的时候,我还放了一段代码片段来展示我的努力,但这次我甚至不能开始写

awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next}
     FNR in arr{print arr[FNR];next}1
    ' fileB fileA

测试结果:

$ cat fileA
poo    foo
koo    goo
too    roo  

$ cat fileB
2 change-second-line with-this
3 change-third-line  with-that

$ awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next}FNR in arr{print arr[FNR];next}1' fileB fileA
poo    foo
change-second-line with-this
change-third-line  with-that

# OR will be faster too
$ awk 'FNR==NR{arr[$1]=substr($0,length($1)+2);next}FNR in arr{print arr[FNR];next}1' fileB fileA
poo    foo
change-second-line with-this
change-third-line  with-that

测试结果:

$ cat fileA
poo    foo
koo    goo
too    roo  

$ cat fileB
2 change-second-line with-this
3 change-third-line  with-that

$ awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next}FNR in arr{print arr[FNR];next}1' fileB fileA
poo    foo
change-second-line with-this
change-third-line  with-that

# OR will be faster too
$ awk 'FNR==NR{arr[$1]=substr($0,length($1)+2);next}FNR in arr{print arr[FNR];next}1' fileB fileA
poo    foo
change-second-line with-this
change-third-line  with-that