【问题标题】:Interclassing 2 sorted files on different columns对不同列上的 2 个已排序文件进行分类
【发布时间】:2017-02-20 10:43:30
【问题描述】:

我有 2 个(非常大的)排序文件,如下所示:

==> date1 <==
1 A
2 A
5 A
7 A

==> date2 <==
B 2
B 4
B 5
B 5
B 6
B 8

我需要以下输出:

1 A
2 A
B 2
B 4
5 A
B 5
B 5
B 6
7 A
B 8

所以我需要根据 2 个不同的列合并 2 个文件,方法是对 2 个文件中的行进行分类。

我尝试使用 sort -m,但据我所知,我们无法为每个文件指定不同的列。
我也尝试使用 awk 和 FNR==NR 技巧,但文件太大了。

【问题讨论】:

    标签: sorting awk merge


    【解决方案1】:
    $ 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
    

    【讨论】:

    • 仅当我的行不包含“*”时才有效,情况并非如此(我不知道我的行上有哪个字符,所以我假设所有字符都可以在行,如果不清楚,抱歉)
    • @robertd:它适用于给定的输入,在创建帖子时请发布与您的真实输入相同的数据,这样可以节省您和其他人(来这里帮助)的时间,同时你会得到你想要的
    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多