我有两个档案文件A和档案B.
文件A中的行包含两个用制表符或单个字段分隔的字段。在文件B中,每行包含3个字段(再次与选项卡分隔)第一个字段是整数,第二个和第三个字段是一些字符串。现在,如果在文件B(第一个字段)中看到其行号,我想更改文件A中的一行。通过更改,我的意思是我想通过选项卡合并文件B中该行的第二个和第三个字段,并将相应的行放在文件A中
例如,假设我有一个包含3行的文件A
File A:
poo foo
koo goo
too roo
我有一个包含2行的文件。
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
有办法吗?一般来说,在提问时我还会放一个显示我努力的代码片段,但这次我甚至无法开始写这个。
答案 0 :(得分:0)
awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next}
FNR in arr{print arr[FNR];next}1
' fileB fileA
OR
awk 'FNR==NR{arr[$1]=substr($0,length($1)+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