gpt4 book ai didi

linux - 过滤两个多列的大文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:39 25 4
gpt4 key购买 nike

我有两个大文件(数百万行),但我无权访问数据库。我必须使用 bash。

第一个文件是这样的:

NUMBER   CODE   CAMP2
1222 aa132 3264
1223 ab124 4283
1224 af121 6224
1225 ag172 9235
1226 aw183 1229
.
.
.

我的第二个文件是这样的:

NUMBER   NAME    CAMP3
1222 Juan 1111
1223 Carlos 2222
1225 Jesus 4444
1226 Mosies 5555
.
.
.

我需要按 NUMBER 交叉文件:

NUMBER   CODE   CAMP2   NAME     CAMP3
1222 aa132 3264 Juan 1111
1223 ab124 4283 Carlos 2222
1225 ag172 9235 Jesus 4444
1226 aw183 1229 Mosies 5555

我逐行尝试使用 for read,但这会花费很多时间。

comm 是不可能的,因为有很多列。

两个文件的行数不同。第一个文件中有些行第二个文件中没有,反之亦然。

到目前为止我的代码非常简单:

while read line
do
numer=$(echo $line | awk -F" " '{print $1}')
search=$(grep $numer file2)
if [ ! -z $search ]; then
echo $line" "$search > file_output
fi
done < file1

while 有效,但需要很长时间。

最佳答案

下面的工作,但可能效率不高

$ head f*
==> f1.txt <==
NUMBER CODE CAMP2
1222 aa132 3264
1223 ab124 4283
1224 af121 6224
1225 ag172 9235
1226 aw183 1229

==> f2.txt <==
NUMBER NAME CAMP3
1222 Juan 1111
1223 Carlos 2222
1225 Jesus 4444
1226 Mosies 5555


$ awk '{ while(getline line < "f2.txt") {split(line, a, " "); if(a[1] == $1) {print $1, $2, $3, a[2], a[3] }} close("f2.txt"); }' f1.txt

NUMBER CODE CAMP2 NAME CAMP3
1222 aa132 3264 Juan 1111
1223 ab124 4283 Carlos 2222
1225 ag172 9235 Jesus 4444
1226 aw183 1229 Mosies 5555

关于linux - 过滤两个多列的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40641658/

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