Sorting 在不同列上对2个已排序文件进行交叉分类
我有两个(非常大)排序文件,如下所示:Sorting 在不同列上对2个已排序文件进行交叉分类,sorting,awk,merge,Sorting,Awk,Merge,我有两个(非常大)排序文件,如下所示: ==> date1 <== 1 A 2 A 5 A 7 A ==> date2 <== B 2 B 4 B 5 B 5 B 6 B 8 所以我需要根据两个不同的列合并两个文件,通过对两个文件的行进行分类 我尝试使用sort-m,但据我所知,我们无法为每个文件指定不同的列。 我也尝试使用awk和FNR==NR技巧,但文件太大,无法实现此目的。$cat f1 $ cat f1 1 A 2 A 5 A 7 A $ cat f2 B
==> date1 <==
1 A
2 A
5 A
7 A
==> date2 <==
B 2
B 4
B 5
B 5
B 6
B 8
所以我需要根据两个不同的列合并两个文件,通过对两个文件的行进行分类
我尝试使用sort-m
,但据我所知,我们无法为每个文件指定不同的列。我也尝试使用awk和FNR==NR技巧,但文件太大,无法实现此目的。
$cat f1
$ cat f1
1 A
2 A
5 A
7 A
$ cat f2
B 2
B 4
B 5
B 5
B 6
B 8
$ sort -nk1 -k2 f1 <(awk '{print $2,$1,"*"}' f2) | awk '/*/{print $2,$1; next}1'
1 A
2 A
B 2
B 4
5 A
B 5
B 5
B 6
7 A
B 8
1A
2A
5 A
7 A
$cat f2
B 2
B 4
B 5
B 5
B 6
B 8
$sort-nk1-k2 f1仅当我的行不包含“*”时此项工作,情况并非如此(我不知道我的行上有哪个字符,因此我假设所有字符都可以在行上,如果不清楚,很抱歉)@robertd:它适用于给定输入,同时创建post请发布与实际输入相同的数据,以便您和其他人(来这里帮忙的人)可以节省时间,同时你会得到你想要的
$ cat f1
1 A
2 A
5 A
7 A
$ cat f2
B 2
B 4
B 5
B 5
B 6
B 8
$ sort -nk1 -k2 f1 <(awk '{print $2,$1,"*"}' f2) | awk '/*/{print $2,$1; next}1'
1 A
2 A
B 2
B 4
5 A
B 5
B 5
B 6
7 A
B 8