gpt4 book ai didi

awk - 在 gawk 中加入多个文件

转载 作者:行者123 更新时间:2023-12-02 16:33:19 25 4
gpt4 key购买 nike

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

File 1  
a 123
b 221
c 904

File 2 
a 298
b 230
c 102

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

Final file
a 123 298
b 221 230
c 904 102

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

最佳答案

对于给定的示例文件:

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

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

==> f3 <==
a 500
b 600
c 700

方法一:

$ 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

方法 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

通过管道将其传输到 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

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

关于awk - 在 gawk 中加入多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23173825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com