加入gawk中的多个文件

use*_*dal 4 awk gawk

我有大量的文件(大约500个).每个文件包含两列.每个文件的第一列相同.我想使用gawk将所有文件合并到一个文件中.
例如,

File 1  
a 123  
b 221  
c 904 
Run Code Online (Sandbox Code Playgroud)

File 2 
a 298  
b 230  
c 102  
Run Code Online (Sandbox Code Playgroud)

等等.我想要一个如下所示的最终文件:

Final file
a 123 298  
b 221 230  
c 904 102  
Run Code Online (Sandbox Code Playgroud)

我找到了可以连接两个文件的脚本,但我需要加入多个文件.

jay*_*ngh 5

对于给定的示例文件:

$ head f*
==> f1 <==
a 123
b 221
c 904

==> f2 <==
a 298
b 230
c 102

==> f3 <==
a 500
b 600
c 700
Run Code Online (Sandbox Code Playgroud)

方法1:

$ awk '{a[FNR]=((a[FNR])?a[FNR]FS$2:$0)}END{for(i=1;i<=FNR;i++) print a[i]}' f*
a 123 298 500
b 221 230 600
c 904 102 700
Run Code Online (Sandbox Code Playgroud)

方法2 :(因为你没有在内存中加载500个文件,可能会更快)

使用pasteawk在一起.(假设第一列相同并存在于所有文件中).做paste f*会给你以下结果:

$ paste f*
a 123   a 298   a 500
b 221   b 230   b 600
c 904   c 102   c 700
Run Code Online (Sandbox Code Playgroud)

管道,以awk删除额外的列.

$ paste f* | awk '{printf "%s ",$1;for(i=2;i<=NF;i+=2) printf "%s%s",$i,(i==NF?RS:FS)}'
a 123 298 500
b 221 230 600
c 904 102 700
Run Code Online (Sandbox Code Playgroud)

您可以将输出重定向到另一个文件.