如何同时排序和加入?

如何同时排序和加入?

我有 2 个文件,一个有 2 列,另一个有 1 列。
第二个文件使用 排序sort -u
现在的任务是我需要将此列与第一个文件的第一列连接起来,该文件未排序。

那么语法是什么?将join -j 1 file2.txt sort -s -n -k 1 file1.txt工作?

我想要的输出实际上是加入后文件 2 的第二列以及其中的唯一条目。

文件2


1
2
3

文件1


2  500
1  5000 
1  300
3  3000 
3  300
4  450

输出


5000
300
500
3000

答案1

这里不需要使用非标准流程替换( <(...)):

sort file1 | join -o1.2 - file2 | uniq

答案2

join file2.txt <(sort file1.txt) | awk '{print $2}'

答案3

sort使用+的一种方法awk。我在稳定模式下按另一个文件的第一个数字对其进行排序。在awk我比较了哪些键文件1与键匹配文件2不再重复,打印它们:

sort -snk1,1 file1 | awk '
    FNR == NR { 
        keys[ $1 ] = 1; 
        next; 
    } 
    !values[ $2 ] && keys[ $1 ] { 
        printf "%s\n", $2; 
        values[ $2 ] = 1; 
    }
' file2 -

输出:

5000
300
500
3000

相关内容