並べ替えと参加を同時に行う方法は?

並べ替えと参加を同時に行う方法は?

2つのファイルがあり、1つに2つの列があり、もう1つに1つの列があります。
2番目のファイルはソートを使用しますsort -u
これで、作業は、この列をソートされていない最初のファイルの最初の列と組み合わせる必要があることです。

それでは構文は何ですか?動作しますかjoin -j 1 file2.txt sort -s -n -k 1 file1.txt

私が望む出力は、実際に結合した後のファイル2の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

関連情報