我有两个文本文件,
文件1包含
等数据用户游戏次数
A Rugby 2
A Football 2
B Volleyball 1
C TT 2
...
文件2
1 Basketball
2 Football
3 Rugby
...
90 TT
91 Volleyball
...
现在我要做的是在文件2中添加另一列,以便我将文件2中相应的游戏索引作为文件1中的额外列。
我在文件1中有200万个条目。所以我想添加另一个列,指定文件2中游戏的索引(基本上是行号或顺序)。如何有效地执行此操作。
现在我逐行做这个。从文件1中读取一行,从文件2中获取相应的游戏,获取其行号并将其保存/写入文件。
这将花费我很多年。如果文件2中有1000万行,文件1中有3000行,我怎样才能加快速度?
答案 0 :(得分:1)
使用awk,将File2
中的字段1读入由字段2索引的数组中,在迭代时使用File1
中的字段2查找数组
awk 'NR == FNR{a[$2]=$1; next}; {print $0, a[$2]}' File2 File1
A Rugby 2 3
A Football 2 2
B Volleyball 1 91
C TT 2 90
答案 1 :(得分:0)
您可以从第二个文件构造一个关联数组,游戏名称为键,游戏索引为值。然后对于文件1中的每一行,在数组中搜索想要的id,并将其写回
答案 2 :(得分:0)
使用join
命令:
$ cat file1
A Rugby 2
A Football 2
B Volleyball 1
C TT 2
$ cat file2
1 Basketball
2 Football
3 Rugby
90 TT
91 Volleyball
$ join -1 3 -2 1 -o 1.1,1.2,1.3,2.2 \
<(sort -k 3 file1) <(sort -k 1 file2)
B Volleyball 1 Basketball
A Football 2 Football
A Rugby 2 Football
C TT 2 Football
答案 3 :(得分:0)
这是另一种方法:只将小文件读入内存,然后逐行读取更大的文件。找到每个ID后,纾困:
awk '
NR == FNR {
f1[$2] = $0
n++
next
}
($2 in f1) {
print f1[$2], $1
delete f1[$2]
if (--n == 0) exit
}
' file1 file2
重读你的问题,我不知道我是否回答了这个问题:你想要在file1或file2附加一个额外的列吗?